alepha 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (845) hide show
  1. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  2. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  3. package/dist/api/audits/index.browser.js +49 -52
  4. package/dist/api/audits/index.browser.js.map +1 -1
  5. package/dist/api/audits/index.d.ts +629 -565
  6. package/dist/api/audits/index.d.ts.map +1 -1
  7. package/dist/api/audits/index.js +206 -98
  8. package/dist/api/audits/index.js.map +1 -1
  9. package/dist/api/files/index.browser.js +44 -44
  10. package/dist/api/files/index.browser.js.map +1 -1
  11. package/dist/api/files/index.d.ts +292 -293
  12. package/dist/api/files/index.d.ts.map +1 -1
  13. package/dist/api/files/index.js +61 -64
  14. package/dist/api/files/index.js.map +1 -1
  15. package/dist/api/jobs/index.browser.js +61 -59
  16. package/dist/api/jobs/index.browser.js.map +1 -1
  17. package/dist/api/jobs/index.d.ts +546 -347
  18. package/dist/api/jobs/index.d.ts.map +1 -1
  19. package/dist/api/jobs/index.js +165 -86
  20. package/dist/api/jobs/index.js.map +1 -1
  21. package/dist/api/keys/index.d.ts +247 -235
  22. package/dist/api/keys/index.d.ts.map +1 -1
  23. package/dist/api/keys/index.js +63 -66
  24. package/dist/api/keys/index.js.map +1 -1
  25. package/dist/api/notifications/index.browser.js +40 -38
  26. package/dist/api/notifications/index.browser.js.map +1 -1
  27. package/dist/api/notifications/index.d.ts +339 -209
  28. package/dist/api/notifications/index.d.ts.map +1 -1
  29. package/dist/api/notifications/index.js +108 -60
  30. package/dist/api/notifications/index.js.map +1 -1
  31. package/dist/api/oauth/index.d.ts +190 -78
  32. package/dist/api/oauth/index.d.ts.map +1 -1
  33. package/dist/api/oauth/index.js +290 -68
  34. package/dist/api/oauth/index.js.map +1 -1
  35. package/dist/api/organizations/index.browser.js +14 -14
  36. package/dist/api/organizations/index.browser.js.map +1 -1
  37. package/dist/api/organizations/index.d.ts +158 -134
  38. package/dist/api/organizations/index.d.ts.map +1 -1
  39. package/dist/api/organizations/index.js +18 -18
  40. package/dist/api/organizations/index.js.map +1 -1
  41. package/dist/api/parameters/index.browser.js +74 -53
  42. package/dist/api/parameters/index.browser.js.map +1 -1
  43. package/dist/api/parameters/index.d.ts +607 -513
  44. package/dist/api/parameters/index.d.ts.map +1 -1
  45. package/dist/api/parameters/index.js +205 -127
  46. package/dist/api/parameters/index.js.map +1 -1
  47. package/dist/api/payments/index.d.ts +652 -449
  48. package/dist/api/payments/index.d.ts.map +1 -1
  49. package/dist/api/payments/index.js +159 -93
  50. package/dist/api/payments/index.js.map +1 -1
  51. package/dist/api/subscriptions/index.d.ts +1032 -762
  52. package/dist/api/subscriptions/index.d.ts.map +1 -1
  53. package/dist/api/subscriptions/index.js +166 -185
  54. package/dist/api/subscriptions/index.js.map +1 -1
  55. package/dist/api/users/index.browser.js +48 -71
  56. package/dist/api/users/index.browser.js.map +1 -1
  57. package/dist/api/users/index.d.ts +1297 -1143
  58. package/dist/api/users/index.d.ts.map +1 -1
  59. package/dist/api/users/index.js +456 -392
  60. package/dist/api/users/index.js.map +1 -1
  61. package/dist/api/verifications/index.browser.js +17 -17
  62. package/dist/api/verifications/index.browser.js.map +1 -1
  63. package/dist/api/verifications/index.d.ts +167 -155
  64. package/dist/api/verifications/index.d.ts.map +1 -1
  65. package/dist/api/verifications/index.js +47 -95
  66. package/dist/api/verifications/index.js.map +1 -1
  67. package/dist/background/index.d.ts +0 -1
  68. package/dist/background/index.d.ts.map +1 -1
  69. package/dist/background/index.js.map +1 -1
  70. package/dist/background/index.workerd.js.map +1 -1
  71. package/dist/batch/index.d.ts +0 -1
  72. package/dist/batch/index.d.ts.map +1 -1
  73. package/dist/batch/index.js.map +1 -1
  74. package/dist/bin/index.js +1 -1
  75. package/dist/bin/index.js.map +1 -1
  76. package/dist/bucket/index.d.ts +27 -32
  77. package/dist/bucket/index.d.ts.map +1 -1
  78. package/dist/bucket/index.js +56 -26
  79. package/dist/bucket/index.js.map +1 -1
  80. package/dist/bucket/index.workerd.js +52 -24
  81. package/dist/bucket/index.workerd.js.map +1 -1
  82. package/dist/cache/core/index.d.ts +4 -6
  83. package/dist/cache/core/index.d.ts.map +1 -1
  84. package/dist/cache/core/index.js +4 -10
  85. package/dist/cache/core/index.js.map +1 -1
  86. package/dist/cache/core/index.workerd.js +4 -10
  87. package/dist/cache/core/index.workerd.js.map +1 -1
  88. package/dist/cache/database/index.d.ts +22 -23
  89. package/dist/cache/database/index.d.ts.map +1 -1
  90. package/dist/cache/database/index.js +11 -20
  91. package/dist/cache/database/index.js.map +1 -1
  92. package/dist/cache/redis/index.d.ts +3 -4
  93. package/dist/cache/redis/index.d.ts.map +1 -1
  94. package/dist/cache/redis/index.js +2 -2
  95. package/dist/cache/redis/index.js.map +1 -1
  96. package/dist/captcha/index.d.ts.map +1 -1
  97. package/dist/captcha/index.js +4 -4
  98. package/dist/captcha/index.js.map +1 -1
  99. package/dist/cli/config/index.d.ts +0 -1
  100. package/dist/cli/config/index.d.ts.map +1 -1
  101. package/dist/cli/core/index.d.ts +205 -442
  102. package/dist/cli/core/index.d.ts.map +1 -1
  103. package/dist/cli/core/index.js +259 -284
  104. package/dist/cli/core/index.js.map +1 -1
  105. package/dist/cli/devtools/index.d.ts +3 -9
  106. package/dist/cli/devtools/index.d.ts.map +1 -1
  107. package/dist/cli/devtools/index.js +3 -3
  108. package/dist/cli/devtools/index.js.map +1 -1
  109. package/dist/cli/i18n/index.d.ts +8 -34
  110. package/dist/cli/i18n/index.d.ts.map +1 -1
  111. package/dist/cli/i18n/index.js +6 -6
  112. package/dist/cli/i18n/index.js.map +1 -1
  113. package/dist/cli/platform/index.d.ts +89 -82
  114. package/dist/cli/platform/index.d.ts.map +1 -1
  115. package/dist/cli/platform/index.js +27 -33
  116. package/dist/cli/platform/index.js.map +1 -1
  117. package/dist/cli/platform-lib/index.d.ts +351 -404
  118. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  119. package/dist/cli/platform-lib/index.js +218 -239
  120. package/dist/cli/platform-lib/index.js.map +1 -1
  121. package/dist/cli/vendor/index.d.ts +17 -41
  122. package/dist/cli/vendor/index.d.ts.map +1 -1
  123. package/dist/cli/vendor/index.js +10 -13
  124. package/dist/cli/vendor/index.js.map +1 -1
  125. package/dist/command/index.d.ts +83 -195
  126. package/dist/command/index.d.ts.map +1 -1
  127. package/dist/command/index.js +160 -563
  128. package/dist/command/index.js.map +1 -1
  129. package/dist/core/index.browser.js +845 -859
  130. package/dist/core/index.browser.js.map +1 -1
  131. package/dist/core/index.d.ts +787 -527
  132. package/dist/core/index.d.ts.map +1 -1
  133. package/dist/core/index.js +845 -859
  134. package/dist/core/index.js.map +1 -1
  135. package/dist/core/index.native.js +845 -859
  136. package/dist/core/index.native.js.map +1 -1
  137. package/dist/core/index.workerd.js +845 -859
  138. package/dist/core/index.workerd.js.map +1 -1
  139. package/dist/crypto/index.browser.js +1 -1
  140. package/dist/crypto/index.browser.js.map +1 -1
  141. package/dist/crypto/index.d.ts +3 -4
  142. package/dist/crypto/index.d.ts.map +1 -1
  143. package/dist/crypto/index.js +6 -3
  144. package/dist/crypto/index.js.map +1 -1
  145. package/dist/datetime/index.d.ts +12 -2
  146. package/dist/datetime/index.d.ts.map +1 -1
  147. package/dist/datetime/index.js +6 -1
  148. package/dist/datetime/index.js.map +1 -1
  149. package/dist/email/brevo/index.d.ts +0 -1
  150. package/dist/email/brevo/index.d.ts.map +1 -1
  151. package/dist/email/brevo/index.js +4 -4
  152. package/dist/email/brevo/index.js.map +1 -1
  153. package/dist/email/cloudflare/index.d.ts +0 -1
  154. package/dist/email/cloudflare/index.d.ts.map +1 -1
  155. package/dist/email/cloudflare/index.js +2 -2
  156. package/dist/email/cloudflare/index.js.map +1 -1
  157. package/dist/email/core/index.d.ts +15 -7
  158. package/dist/email/core/index.d.ts.map +1 -1
  159. package/dist/email/core/index.js +14 -5
  160. package/dist/email/core/index.js.map +1 -1
  161. package/dist/email/core/index.workerd.js +5 -1
  162. package/dist/email/core/index.workerd.js.map +1 -1
  163. package/dist/email/smtp/index.d.ts +8 -9
  164. package/dist/email/smtp/index.d.ts.map +1 -1
  165. package/dist/email/smtp/index.js +702 -479
  166. package/dist/email/smtp/index.js.map +1 -1
  167. package/dist/fake/index.d.ts +1580 -1238
  168. package/dist/fake/index.d.ts.map +1 -1
  169. package/dist/fake/index.js +11728 -32131
  170. package/dist/fake/index.js.map +1 -1
  171. package/dist/lock/core/index.d.ts +13 -9
  172. package/dist/lock/core/index.d.ts.map +1 -1
  173. package/dist/lock/core/index.js +5 -5
  174. package/dist/lock/core/index.js.map +1 -1
  175. package/dist/lock/redis/index.d.ts +0 -1
  176. package/dist/lock/redis/index.d.ts.map +1 -1
  177. package/dist/lock/redis/index.js.map +1 -1
  178. package/dist/logger/index.d.ts +81 -69
  179. package/dist/logger/index.d.ts.map +1 -1
  180. package/dist/logger/index.js +123 -56
  181. package/dist/logger/index.js.map +1 -1
  182. package/dist/mcp/index.d.ts +27 -90
  183. package/dist/mcp/index.d.ts.map +1 -1
  184. package/dist/mcp/index.js +42 -70
  185. package/dist/mcp/index.js.map +1 -1
  186. package/dist/orm/core/index.browser.js +54 -40
  187. package/dist/orm/core/index.browser.js.map +1 -1
  188. package/dist/orm/core/index.bun.js +140 -106
  189. package/dist/orm/core/index.bun.js.map +1 -1
  190. package/dist/orm/core/index.d.ts +145 -150
  191. package/dist/orm/core/index.d.ts.map +1 -1
  192. package/dist/orm/core/index.js +144 -109
  193. package/dist/orm/core/index.js.map +1 -1
  194. package/dist/orm/postgres/index.bun.js +64 -54
  195. package/dist/orm/postgres/index.bun.js.map +1 -1
  196. package/dist/orm/postgres/index.d.ts +36 -76
  197. package/dist/orm/postgres/index.d.ts.map +1 -1
  198. package/dist/orm/postgres/index.js +67 -57
  199. package/dist/orm/postgres/index.js.map +1 -1
  200. package/dist/queue/core/index.d.ts +62 -75
  201. package/dist/queue/core/index.d.ts.map +1 -1
  202. package/dist/queue/core/index.js +48 -71
  203. package/dist/queue/core/index.js.map +1 -1
  204. package/dist/queue/core/index.workerd.js +48 -71
  205. package/dist/queue/core/index.workerd.js.map +1 -1
  206. package/dist/queue/redis/index.d.ts +3 -4
  207. package/dist/queue/redis/index.d.ts.map +1 -1
  208. package/dist/queue/redis/index.js +2 -2
  209. package/dist/queue/redis/index.js.map +1 -1
  210. package/dist/react/auth/index.browser.js.map +1 -1
  211. package/dist/react/auth/index.d.ts +7 -4
  212. package/dist/react/auth/index.d.ts.map +1 -1
  213. package/dist/react/auth/index.js.map +1 -1
  214. package/dist/react/core/index.d.ts +87 -5
  215. package/dist/react/core/index.d.ts.map +1 -1
  216. package/dist/react/core/index.js +170 -23
  217. package/dist/react/core/index.js.map +1 -1
  218. package/dist/react/form/index.d.ts +4 -5
  219. package/dist/react/form/index.d.ts.map +1 -1
  220. package/dist/react/form/index.js +91 -56
  221. package/dist/react/form/index.js.map +1 -1
  222. package/dist/react/head/index.browser.js.map +1 -1
  223. package/dist/react/head/index.d.ts +0 -1
  224. package/dist/react/head/index.d.ts.map +1 -1
  225. package/dist/react/head/index.js.map +1 -1
  226. package/dist/react/i18n/index.d.ts +4 -5
  227. package/dist/react/i18n/index.d.ts.map +1 -1
  228. package/dist/react/i18n/index.js +2 -2
  229. package/dist/react/i18n/index.js.map +1 -1
  230. package/dist/react/intro/index.d.ts +1 -4
  231. package/dist/react/intro/index.d.ts.map +1 -1
  232. package/dist/react/intro/index.js.map +1 -1
  233. package/dist/react/router/index.browser.js +60 -24
  234. package/dist/react/router/index.browser.js.map +1 -1
  235. package/dist/react/router/index.d.ts +378 -377
  236. package/dist/react/router/index.d.ts.map +1 -1
  237. package/dist/react/router/index.js +77 -41
  238. package/dist/react/router/index.js.map +1 -1
  239. package/dist/react/sitemap/index.d.ts +0 -1
  240. package/dist/react/sitemap/index.d.ts.map +1 -1
  241. package/dist/react/sitemap/index.js.map +1 -1
  242. package/dist/react/testing/index.d.ts +4 -5
  243. package/dist/react/testing/index.d.ts.map +1 -1
  244. package/dist/react/testing/index.js +41 -15
  245. package/dist/react/testing/index.js.map +1 -1
  246. package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
  247. package/dist/react/ui/index.d.ts +35 -34
  248. package/dist/react/ui/index.d.ts.map +1 -1
  249. package/dist/react/ui/index.js +12 -17
  250. package/dist/react/ui/index.js.map +1 -1
  251. package/dist/redis/index.bun.js +5 -5
  252. package/dist/redis/index.bun.js.map +1 -1
  253. package/dist/redis/index.d.ts +6 -7
  254. package/dist/redis/index.d.ts.map +1 -1
  255. package/dist/redis/index.js +6 -6
  256. package/dist/redis/index.js.map +1 -1
  257. package/dist/retry/index.d.ts +0 -1
  258. package/dist/retry/index.d.ts.map +1 -1
  259. package/dist/retry/index.js.map +1 -1
  260. package/dist/router/index.d.ts.map +1 -1
  261. package/dist/router/index.js.map +1 -1
  262. package/dist/scheduler/index.d.ts +4 -12
  263. package/dist/scheduler/index.d.ts.map +1 -1
  264. package/dist/scheduler/index.js +9 -4
  265. package/dist/scheduler/index.js.map +1 -1
  266. package/dist/scheduler/index.workerd.js +9 -4
  267. package/dist/scheduler/index.workerd.js.map +1 -1
  268. package/dist/security/index.browser.js +30 -28
  269. package/dist/security/index.browser.js.map +1 -1
  270. package/dist/security/index.d.ts +113 -44
  271. package/dist/security/index.d.ts.map +1 -1
  272. package/dist/security/index.js +452 -37
  273. package/dist/security/index.js.map +1 -1
  274. package/dist/server/auth/index.browser.js +19 -19
  275. package/dist/server/auth/index.browser.js.map +1 -1
  276. package/dist/server/auth/index.d.ts +198 -274
  277. package/dist/server/auth/index.d.ts.map +1 -1
  278. package/dist/server/auth/index.js +83 -621
  279. package/dist/server/auth/index.js.map +1 -1
  280. package/dist/server/cookies/index.browser.js +103 -5
  281. package/dist/server/cookies/index.browser.js.map +1 -1
  282. package/dist/server/cookies/index.d.ts +72 -5
  283. package/dist/server/cookies/index.d.ts.map +1 -1
  284. package/dist/server/cookies/index.js +103 -9
  285. package/dist/server/cookies/index.js.map +1 -1
  286. package/dist/server/core/index.browser.js +22 -27
  287. package/dist/server/core/index.browser.js.map +1 -1
  288. package/dist/server/core/index.d.ts +116 -85
  289. package/dist/server/core/index.d.ts.map +1 -1
  290. package/dist/server/core/index.js +105 -118
  291. package/dist/server/core/index.js.map +1 -1
  292. package/dist/server/cors/index.d.ts +9 -10
  293. package/dist/server/cors/index.d.ts.map +1 -1
  294. package/dist/server/cors/index.js +14 -26
  295. package/dist/server/cors/index.js.map +1 -1
  296. package/dist/server/etag/index.d.ts +2 -3
  297. package/dist/server/etag/index.d.ts.map +1 -1
  298. package/dist/server/etag/index.js.map +1 -1
  299. package/dist/server/health/index.d.ts +18 -19
  300. package/dist/server/health/index.d.ts.map +1 -1
  301. package/dist/server/health/index.js +6 -6
  302. package/dist/server/health/index.js.map +1 -1
  303. package/dist/server/links/index.browser.js +15 -18
  304. package/dist/server/links/index.browser.js.map +1 -1
  305. package/dist/server/links/index.d.ts +66 -67
  306. package/dist/server/links/index.d.ts.map +1 -1
  307. package/dist/server/links/index.js +29 -32
  308. package/dist/server/links/index.js.map +1 -1
  309. package/dist/server/metrics/index.d.ts +0 -1
  310. package/dist/server/metrics/index.d.ts.map +1 -1
  311. package/dist/server/metrics/index.js +10 -3
  312. package/dist/server/metrics/index.js.map +1 -1
  313. package/dist/server/proxy/index.d.ts +0 -1
  314. package/dist/server/proxy/index.d.ts.map +1 -1
  315. package/dist/server/proxy/index.js.map +1 -1
  316. package/dist/server/rate-limit/index.d.ts +8 -9
  317. package/dist/server/rate-limit/index.d.ts.map +1 -1
  318. package/dist/server/rate-limit/index.js +6 -12
  319. package/dist/server/rate-limit/index.js.map +1 -1
  320. package/dist/server/static/index.d.ts +0 -1
  321. package/dist/server/static/index.d.ts.map +1 -1
  322. package/dist/server/static/index.js.map +1 -1
  323. package/dist/server/swagger/index.d.ts +4 -4
  324. package/dist/server/swagger/index.d.ts.map +1 -1
  325. package/dist/server/swagger/index.js +37 -25
  326. package/dist/server/swagger/index.js.map +1 -1
  327. package/dist/sms/index.d.ts +0 -1
  328. package/dist/sms/index.d.ts.map +1 -1
  329. package/dist/sms/index.js.map +1 -1
  330. package/dist/system/index.browser.js.map +1 -1
  331. package/dist/system/index.d.ts +0 -1
  332. package/dist/system/index.d.ts.map +1 -1
  333. package/dist/system/index.js +2 -1
  334. package/dist/system/index.js.map +1 -1
  335. package/dist/system/index.workerd.js.map +1 -1
  336. package/dist/topic/core/index.d.ts +19 -20
  337. package/dist/topic/core/index.d.ts.map +1 -1
  338. package/dist/topic/core/index.js +8 -8
  339. package/dist/topic/core/index.js.map +1 -1
  340. package/dist/topic/redis/index.d.ts +3 -4
  341. package/dist/topic/redis/index.d.ts.map +1 -1
  342. package/dist/topic/redis/index.js +2 -2
  343. package/dist/topic/redis/index.js.map +1 -1
  344. package/package.json +22 -35
  345. package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
  346. package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
  347. package/src/api/audits/controllers/AdminAuditController.ts +41 -41
  348. package/src/api/audits/entities/audits.ts +22 -22
  349. package/src/api/audits/index.ts +6 -1
  350. package/src/api/audits/jobs/AuditJobs.ts +29 -0
  351. package/src/api/audits/parameters/AuditParameters.ts +51 -0
  352. package/src/api/audits/primitives/$audit.ts +24 -0
  353. package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
  354. package/src/api/audits/schemas/createAuditSchema.ts +18 -18
  355. package/src/api/audits/services/AuditService.ts +79 -7
  356. package/src/api/files/__tests__/FileController.spec.ts +5 -5
  357. package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
  358. package/src/api/files/controllers/FileController.ts +25 -25
  359. package/src/api/files/entities/files.ts +15 -15
  360. package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
  361. package/src/api/files/schemas/fileQuerySchema.ts +9 -9
  362. package/src/api/files/schemas/fileResourceSchema.ts +7 -9
  363. package/src/api/files/schemas/storageStatsSchema.ts +13 -13
  364. package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
  365. package/src/api/jobs/__tests__/$job.spec.ts +18 -18
  366. package/src/api/jobs/controllers/AdminJobController.ts +8 -8
  367. package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
  368. package/src/api/jobs/providers/JobProvider.ts +128 -12
  369. package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
  370. package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
  371. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
  372. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
  373. package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
  374. package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
  375. package/src/api/jobs/services/JobService.ts +6 -6
  376. package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
  377. package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
  378. package/src/api/keys/entities/apiKeyEntity.ts +15 -15
  379. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
  380. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
  381. package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
  382. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
  383. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
  384. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
  385. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
  386. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
  387. package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
  388. package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
  389. package/src/api/notifications/primitives/$notification.ts +43 -4
  390. package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
  391. package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
  392. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
  393. package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
  394. package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
  395. package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
  396. package/src/api/notifications/services/NotificationSenderService.ts +38 -2
  397. package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
  398. package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
  399. package/src/api/oauth/controllers/OAuthController.ts +132 -12
  400. package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
  401. package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
  402. package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
  403. package/src/api/oauth/index.ts +1 -0
  404. package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
  405. package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
  406. package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
  407. package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
  408. package/src/api/oauth/services/OAuthClientService.ts +228 -15
  409. package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
  410. package/src/api/organizations/entities/organizations.ts +6 -6
  411. package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
  412. package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
  413. package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
  414. package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
  415. package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
  416. package/src/api/parameters/entities/parameters.ts +29 -16
  417. package/src/api/parameters/primitives/$parameter.ts +3 -3
  418. package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
  419. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
  420. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
  421. package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
  422. package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
  423. package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
  424. package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
  425. package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
  426. package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
  427. package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
  428. package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
  429. package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
  430. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
  431. package/src/api/parameters/services/ParameterProvider.ts +152 -65
  432. package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
  433. package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
  434. package/src/api/payments/controllers/PaymentController.ts +4 -4
  435. package/src/api/payments/entities/paymentIntents.ts +11 -11
  436. package/src/api/payments/entities/paymentMethods.ts +11 -11
  437. package/src/api/payments/entities/refunds.ts +9 -9
  438. package/src/api/payments/providers/PaymentProvider.ts +18 -0
  439. package/src/api/payments/schemas/intentSchemas.ts +25 -25
  440. package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
  441. package/src/api/payments/services/PaymentService.ts +60 -3
  442. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
  443. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
  444. package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
  445. package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
  446. package/src/api/subscriptions/entities/subscriptions.ts +22 -22
  447. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
  448. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
  449. package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
  450. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
  451. package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
  452. package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
  453. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
  454. package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
  455. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
  456. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
  457. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
  458. package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
  459. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
  460. package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
  461. package/src/api/users/controllers/AdminIdentityController.ts +29 -19
  462. package/src/api/users/controllers/AdminSessionController.ts +37 -27
  463. package/src/api/users/controllers/AdminUserController.ts +75 -53
  464. package/src/api/users/controllers/MySessionController.ts +125 -0
  465. package/src/api/users/controllers/RealmController.ts +9 -10
  466. package/src/api/users/controllers/UserController.ts +55 -55
  467. package/src/api/users/entities/identities.ts +8 -8
  468. package/src/api/users/entities/sessions.ts +17 -17
  469. package/src/api/users/entities/users.ts +17 -17
  470. package/src/api/users/index.ts +3 -0
  471. package/src/api/users/notifications/UserNotifications.ts +76 -24
  472. package/src/api/users/primitives/$realm.ts +12 -26
  473. package/src/api/users/providers/RealmProvider.ts +0 -15
  474. package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
  475. package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
  476. package/src/api/users/schemas/createUserSchema.ts +2 -2
  477. package/src/api/users/schemas/identityQuerySchema.ts +4 -4
  478. package/src/api/users/schemas/identityResourceSchema.ts +3 -2
  479. package/src/api/users/schemas/loginSchema.ts +4 -4
  480. package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
  481. package/src/api/users/schemas/realmConfigSchema.ts +10 -24
  482. package/src/api/users/schemas/registerQuerySchema.ts +6 -6
  483. package/src/api/users/schemas/registerRequestSchema.ts +21 -43
  484. package/src/api/users/schemas/registerResponseSchema.ts +2 -2
  485. package/src/api/users/schemas/registerSchema.ts +13 -31
  486. package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
  487. package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
  488. package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
  489. package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
  490. package/src/api/users/schemas/updateUserSchema.ts +3 -4
  491. package/src/api/users/schemas/userQuerySchema.ts +7 -7
  492. package/src/api/users/services/RegistrationService.ts +25 -11
  493. package/src/api/users/services/UserService.ts +12 -6
  494. package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
  495. package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
  496. package/src/api/verifications/controllers/VerificationController.ts +13 -27
  497. package/src/api/verifications/entities/verifications.ts +13 -14
  498. package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
  499. package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
  500. package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
  501. package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
  502. package/src/api/verifications/services/VerificationService.ts +12 -0
  503. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
  504. package/src/batch/__tests__/$batch.spec.ts +22 -22
  505. package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
  506. package/src/bin/index.ts +1 -1
  507. package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
  508. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
  509. package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
  510. package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
  511. package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
  512. package/src/cache/core/primitives/$cache.ts +7 -10
  513. package/src/cache/database/entities/cacheEntries.ts +16 -27
  514. package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
  515. package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
  516. package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
  517. package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
  518. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
  519. package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
  520. package/src/cli/core/atoms/appEntryOptions.ts +5 -5
  521. package/src/cli/core/atoms/buildOptions.ts +76 -76
  522. package/src/cli/core/atoms/changelogOptions.ts +3 -3
  523. package/src/cli/core/atoms/devOptions.ts +3 -3
  524. package/src/cli/core/commands/build.ts +36 -39
  525. package/src/cli/core/commands/db.ts +171 -83
  526. package/src/cli/core/commands/dev.ts +8 -8
  527. package/src/cli/core/commands/gen/changelog.ts +12 -14
  528. package/src/cli/core/commands/gen/env.ts +6 -6
  529. package/src/cli/core/commands/gen/openapi.ts +6 -6
  530. package/src/cli/core/commands/init.ts +28 -33
  531. package/src/cli/core/commands/pack.ts +10 -10
  532. package/src/cli/core/commands/root.ts +7 -8
  533. package/src/cli/core/commands/test.ts +17 -20
  534. package/src/cli/core/tasks/BuildCloudflareTask.ts +103 -230
  535. package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
  536. package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
  537. package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
  538. package/src/cli/platform/commands/SecretsCommand.ts +24 -25
  539. package/src/cli/platform/commands/platform.ts +40 -46
  540. package/src/cli/platform/index.ts +1 -1
  541. package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
  542. package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
  543. package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
  544. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +13 -14
  545. package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
  546. package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
  547. package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
  548. package/src/cli/platform-lib/schemas/platform.ts +51 -51
  549. package/src/cli/platform-lib/schemas/vercel.ts +28 -28
  550. package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
  551. package/src/cli/platform-lib/services/VercelApi.ts +4 -4
  552. package/src/cli/platform-lib/services/VercelCli.ts +6 -15
  553. package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
  554. package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
  555. package/src/cli/vendor/commands/VendorCommand.ts +11 -12
  556. package/src/command/__tests__/$command.spec.ts +82 -83
  557. package/src/command/__tests__/Asker.spec.ts +6 -13
  558. package/src/command/__tests__/CliProvider.spec.ts +136 -149
  559. package/src/command/__tests__/Runner.spec.ts +86 -110
  560. package/src/command/helpers/Asker.ts +23 -58
  561. package/src/command/helpers/Runner.ts +34 -110
  562. package/src/command/index.ts +4 -9
  563. package/src/command/primitives/$command.ts +10 -10
  564. package/src/command/providers/CliProvider.ts +183 -161
  565. package/src/core/Alepha.ts +62 -13
  566. package/src/core/__tests__/$atom.spec.ts +52 -3
  567. package/src/core/__tests__/$computed.spec.ts +129 -0
  568. package/src/core/__tests__/$env.spec.ts +13 -13
  569. package/src/core/__tests__/$inject.spec.ts +4 -4
  570. package/src/core/__tests__/$module.spec.ts +1 -1
  571. package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
  572. package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
  573. package/src/core/__tests__/Alepha-start.spec.ts +3 -3
  574. package/src/core/__tests__/CodecManager.spec.ts +113 -94
  575. package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
  576. package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
  577. package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
  578. package/src/core/__tests__/StateManager.spec.ts +423 -0
  579. package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
  580. package/src/core/__tests__/TypeProvider.spec.ts +314 -309
  581. package/src/core/__tests__/dump.spec.ts +6 -6
  582. package/src/core/__tests__/pagination.spec.ts +4 -4
  583. package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
  584. package/src/core/errors/TypeBoxError.ts +10 -4
  585. package/src/core/helpers/FileLike.ts +5 -5
  586. package/src/core/helpers/coerceStrings.ts +70 -0
  587. package/src/core/helpers/jsonSchemaToZod.ts +112 -0
  588. package/src/core/index.shared.ts +4 -1
  589. package/src/core/primitives/$atom.ts +95 -27
  590. package/src/core/primitives/$computed.ts +148 -0
  591. package/src/core/primitives/$env.ts +5 -5
  592. package/src/core/primitives/$state.ts +1 -1
  593. package/src/core/providers/AlsProvider.ts +26 -0
  594. package/src/core/providers/CodecManager.ts +1 -2
  595. package/src/core/providers/JsonSchemaCodec.ts +1 -2
  596. package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
  597. package/src/core/providers/SchemaValidator.ts +48 -158
  598. package/src/core/providers/StateManager.ts +383 -9
  599. package/src/core/providers/TypeProvider.ts +80 -734
  600. package/src/core/providers/ZodProvider.ts +380 -0
  601. package/src/core/providers/zodAugment.ts +69 -0
  602. package/src/core/schemas/pageQuerySchema.ts +19 -21
  603. package/src/core/schemas/pageSchema.ts +47 -57
  604. package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
  605. package/src/crypto/providers/SecretProvider.ts +16 -10
  606. package/src/datetime/primitives/$throttle.ts +6 -1
  607. package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
  608. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
  609. package/src/email/core/index.ts +7 -2
  610. package/src/email/core/primitives/$email.ts +5 -1
  611. package/src/email/core/providers/LocalEmailProvider.ts +5 -5
  612. package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
  613. package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
  614. package/src/fake/__tests__/keyName.example.ts +21 -21
  615. package/src/fake/__tests__/keyName.spec.ts +41 -41
  616. package/src/fake/__tests__/module.example.ts +8 -8
  617. package/src/fake/providers/FakeProvider.ts +122 -121
  618. package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
  619. package/src/lock/core/index.ts +1 -0
  620. package/src/lock/core/primitives/$lock.ts +13 -6
  621. package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
  622. package/src/logger/__tests__/Logger.spec.ts +49 -0
  623. package/src/logger/index.ts +25 -18
  624. package/src/logger/providers/CliFormatterProvider.ts +75 -0
  625. package/src/logger/schemas/logEntrySchema.ts +10 -10
  626. package/src/logger/services/Logger.ts +18 -0
  627. package/src/mcp/__tests__/$prompt.spec.ts +21 -23
  628. package/src/mcp/__tests__/$tool.spec.ts +22 -22
  629. package/src/mcp/__tests__/McpServerProvider.spec.ts +11 -11
  630. package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
  631. package/src/mcp/__tests__/integration.spec.ts +33 -33
  632. package/src/mcp/primitives/$prompt.ts +11 -9
  633. package/src/mcp/primitives/$tool.ts +27 -86
  634. package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
  635. package/src/orm/__tests__/$repository-tests.ts +133 -27
  636. package/src/orm/__tests__/$repository.spec.ts +23 -0
  637. package/src/orm/__tests__/$transactional-tests.ts +4 -4
  638. package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
  639. package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
  640. package/src/orm/__tests__/QueryManager.spec.ts +5 -5
  641. package/src/orm/__tests__/delete-returning-tests.ts +11 -11
  642. package/src/orm/__tests__/deletedAt-tests.ts +3 -3
  643. package/src/orm/__tests__/enums.spec.ts +29 -25
  644. package/src/orm/__tests__/execute-tests.ts +8 -8
  645. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
  646. package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
  647. package/src/orm/__tests__/joins-tests.ts +30 -30
  648. package/src/orm/__tests__/organization-tests.ts +105 -3
  649. package/src/orm/__tests__/organization.spec.ts +46 -0
  650. package/src/orm/__tests__/orm-errors.spec.ts +10 -10
  651. package/src/orm/__tests__/orm-next-tests.ts +29 -29
  652. package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
  653. package/src/orm/__tests__/primaryKey.spec.ts +4 -4
  654. package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
  655. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
  656. package/src/orm/__tests__/references.spec.ts +7 -7
  657. package/src/orm/__tests__/security.spec.ts +17 -17
  658. package/src/orm/__tests__/string-operators-tests.ts +5 -5
  659. package/src/orm/__tests__/timestamps-tests.ts +14 -14
  660. package/src/orm/__tests__/validation-tests.ts +5 -5
  661. package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
  662. package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
  663. package/src/orm/core/entities/alephaSequences.ts +8 -8
  664. package/src/orm/core/helpers/pgAttr.ts +4 -4
  665. package/src/orm/core/primitives/$entity.ts +10 -6
  666. package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
  667. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
  668. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
  669. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
  670. package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
  671. package/src/orm/core/schemas/insertSchema.ts +14 -18
  672. package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
  673. package/src/orm/core/schemas/updateSchema.ts +10 -16
  674. package/src/orm/core/services/PgRelationManager.ts +2 -2
  675. package/src/orm/core/services/QueryManager.ts +13 -2
  676. package/src/orm/core/services/Repository.ts +88 -33
  677. package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
  678. package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
  679. package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
  680. package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
  681. package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
  682. package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
  683. package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
  684. package/src/queue/core/__tests__/shared.ts +6 -6
  685. package/src/queue/core/primitives/$consumer.ts +5 -5
  686. package/src/queue/core/primitives/$queue.ts +44 -61
  687. package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
  688. package/src/queue/core/providers/WorkerProvider.ts +17 -14
  689. package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
  690. package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
  691. package/src/react/core/__tests__/Router.spec.tsx +4 -4
  692. package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
  693. package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
  694. package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
  695. package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
  696. package/src/react/core/components/ErrorBoundary.tsx +42 -0
  697. package/src/react/core/hooks/useAction.ts +56 -19
  698. package/src/react/core/hooks/useComputed.ts +91 -0
  699. package/src/react/core/hooks/useSelector.ts +67 -0
  700. package/src/react/core/hooks/useStore.ts +36 -17
  701. package/src/react/core/index.ts +3 -0
  702. package/src/react/core/utils/shallowEqual.ts +36 -0
  703. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +2 -2
  704. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +5 -5
  705. package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
  706. package/src/react/form/errors/FormValidationError.ts +0 -2
  707. package/src/react/form/hooks/useForm.ts +19 -4
  708. package/src/react/form/hooks/useFormQuerySync.ts +0 -0
  709. package/src/react/form/services/FormModel.ts +67 -47
  710. package/src/react/form/services/parseField.ts +66 -27
  711. package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
  712. package/src/react/i18n/providers/I18nProvider.ts +2 -2
  713. package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
  714. package/src/react/router/__tests__/$page.spec.tsx +21 -21
  715. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
  716. package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
  717. package/src/react/router/components/NestedView.tsx +11 -3
  718. package/src/react/router/hooks/useQueryParams.ts +1 -1
  719. package/src/react/router/primitives/$page.ts +2 -2
  720. package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
  721. package/src/react/router/providers/ReactPageProvider.ts +26 -12
  722. package/src/react/router/providers/ReactServerProvider.ts +13 -15
  723. package/src/react/sitemap/__tests__/$sitemap.spec.ts +2 -2
  724. package/src/react/ui/atoms/uiAtom.ts +6 -6
  725. package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
  726. package/src/react/ui/hooks/useColorMode.ts +11 -4
  727. package/src/react/ui/services/SchemaControl.ts +4 -4
  728. package/src/redis/providers/BunRedisProvider.ts +19 -11
  729. package/src/redis/providers/NodeRedisProvider.ts +3 -3
  730. package/src/scheduler/primitives/$scheduler.ts +21 -8
  731. package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
  732. package/src/security/atoms/currentTenantAtom.ts +6 -6
  733. package/src/security/atoms/currentUserAtom.ts +2 -2
  734. package/src/security/primitives/$issuer.ts +24 -2
  735. package/src/security/providers/JwtProvider.ts +100 -0
  736. package/src/security/providers/SecurityProvider.ts +43 -2
  737. package/src/security/schemas/permissionSchema.ts +19 -19
  738. package/src/security/schemas/roleSchema.ts +22 -28
  739. package/src/security/schemas/userAccountInfoSchema.ts +47 -37
  740. package/src/server/auth/index.ts +0 -3
  741. package/src/server/auth/primitives/$auth.ts +6 -6
  742. package/src/server/auth/primitives/$authApple.ts +10 -10
  743. package/src/server/auth/primitives/$authFacebook.ts +10 -10
  744. package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
  745. package/src/server/auth/primitives/$authGithub.ts +10 -10
  746. package/src/server/auth/primitives/$authGoogle.ts +10 -10
  747. package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
  748. package/src/server/auth/providers/ServerAuthProvider.ts +49 -48
  749. package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
  750. package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
  751. package/src/server/auth/schemas/tokensSchema.ts +16 -16
  752. package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
  753. package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
  754. package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
  755. package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
  756. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +14 -14
  757. package/src/server/cookies/index.browser.ts +4 -1
  758. package/src/server/cookies/index.ts +8 -1
  759. package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
  760. package/src/server/cookies/primitives/$cookie.ts +16 -0
  761. package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
  762. package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
  763. package/src/server/cookies/providers/ServerCookiesProvider.ts +13 -5
  764. package/src/server/cookies/services/CookieParser.ts +6 -1
  765. package/src/server/core/__tests__/$action.spec.ts +13 -13
  766. package/src/server/core/__tests__/$middleware.spec.ts +10 -10
  767. package/src/server/core/__tests__/$route.spec.ts +9 -9
  768. package/src/server/core/__tests__/$sse.spec.ts +26 -26
  769. package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
  770. package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
  771. package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
  772. package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
  773. package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
  774. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
  775. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
  776. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
  777. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
  778. package/src/server/core/errors/ValidationError.ts +6 -3
  779. package/src/server/core/helpers/isMultipart.ts +2 -1
  780. package/src/server/core/index.ts +5 -2
  781. package/src/server/core/interfaces/ServerRequest.ts +6 -14
  782. package/src/server/core/primitives/$action.ts +26 -36
  783. package/src/server/core/primitives/$sse.ts +3 -3
  784. package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
  785. package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
  786. package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
  787. package/src/server/core/providers/ServerCompressProvider.ts +9 -10
  788. package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
  789. package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
  790. package/src/server/core/providers/ServerRouterProvider.ts +44 -15
  791. package/src/server/core/schemas/errorSchema.ts +20 -25
  792. package/src/server/core/schemas/okSchema.ts +9 -14
  793. package/src/server/core/services/HttpClient.ts +13 -1
  794. package/src/server/core/services/ServerRequestParser.ts +6 -6
  795. package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
  796. package/src/server/health/schemas/healthSchema.ts +6 -6
  797. package/src/server/links/__tests__/$remote.spec.ts +3 -3
  798. package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
  799. package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
  800. package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
  801. package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
  802. package/src/server/links/atoms/apiLinksAtom.ts +2 -2
  803. package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
  804. package/src/server/links/primitives/$remote.ts +3 -3
  805. package/src/server/links/providers/LinkProvider.ts +3 -3
  806. package/src/server/links/providers/ServerLinksProvider.ts +20 -20
  807. package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
  808. package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
  809. package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
  810. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
  811. package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
  812. package/src/server/swagger/__tests__/ui.spec.ts +3 -3
  813. package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
  814. package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
  815. package/src/system/providers/NodeShellProvider.ts +4 -1
  816. package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
  817. package/src/topic/core/__tests__/shared.ts +8 -8
  818. package/src/topic/core/primitives/$subscriber.ts +5 -5
  819. package/src/topic/core/primitives/$topic.ts +14 -14
  820. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  821. package/dist/container/core/index.d.ts +0 -236
  822. package/dist/container/core/index.d.ts.map +0 -1
  823. package/dist/container/core/index.js +0 -231
  824. package/dist/container/core/index.js.map +0 -1
  825. package/dist/container/core/index.workerd.js +0 -192
  826. package/dist/container/core/index.workerd.js.map +0 -1
  827. package/src/command/helpers/PrettyAsker.ts +0 -256
  828. package/src/command/helpers/PrettyPrint.ts +0 -332
  829. package/src/container/core/__tests__/$container.spec.ts +0 -83
  830. package/src/container/core/index.ts +0 -50
  831. package/src/container/core/index.workerd.ts +0 -53
  832. package/src/container/core/interfaces/ContainerOptions.ts +0 -69
  833. package/src/container/core/primitives/$container.ts +0 -100
  834. package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
  835. package/src/container/core/providers/ContainerProvider.ts +0 -92
  836. package/src/container/core/providers/MockContainerProvider.ts +0 -62
  837. package/src/container/core/providers/NodeContainerProvider.ts +0 -53
  838. package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
  839. package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
  840. package/src/server/auth/__tests__/authFederationClient.spec.ts +0 -40
  841. package/src/server/auth/__tests__/federationAssertion.spec.ts +0 -146
  842. package/src/server/auth/helpers/federationAssertion.ts +0 -74
  843. package/src/server/auth/primitives/$authFederationBroker.ts +0 -273
  844. package/src/server/auth/primitives/$authFederationClient.ts +0 -89
  845. /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { $inject, $module, Alepha, AlephaError, TypeBoxError, isFileLike, t } from "alepha";
1
+ import { $inject, $module, Alepha, AlephaError, TypeBoxError, isFileLike, z } from "alepha";
2
2
  import { $cache } from "alepha/cache";
3
3
  import { $logger } from "alepha/logger";
4
4
  //#region ../../src/server/core/errors/HttpError.ts
@@ -69,35 +69,32 @@ const isMultipart = (options) => {
69
69
  if (options.contentType === "multipart/form-data" || options.requestBodyType === "multipart/form-data") return true;
70
70
  if (options.schema?.body && "properties" in options.schema.body) {
71
71
  const properties = options.schema.body.properties;
72
- for (const key in properties) if (properties[key].format === "binary") return true;
72
+ for (const key in properties) if (z.schema.format(properties[key]) === "binary") return true;
73
73
  }
74
74
  return false;
75
75
  };
76
76
  //#endregion
77
77
  //#region ../../src/server/core/schemas/errorSchema.ts
78
- const errorSchema = t.object({
79
- error: t.text({ description: "HTTP error name" }),
80
- status: t.integer({ description: "HTTP status code" }),
81
- message: t.text({
78
+ const errorSchema = z.object({
79
+ error: z.text({ description: "HTTP error name" }),
80
+ status: z.integer().describe("HTTP status code"),
81
+ message: z.text({
82
82
  description: "Short text which describe the error",
83
83
  size: "rich"
84
84
  }),
85
- details: t.optional(t.text({
85
+ details: z.text({
86
86
  description: "Detailed description of the error",
87
87
  size: "rich"
88
- })),
89
- requestId: t.optional(t.text()),
90
- cause: t.optional(t.object({
91
- name: t.text(),
92
- message: t.text({
88
+ }).optional(),
89
+ requestId: z.text().optional(),
90
+ cause: z.object({
91
+ name: z.text(),
92
+ message: z.text({
93
93
  description: "Cause Error message",
94
94
  size: "rich"
95
95
  })
96
- }))
97
- }, {
98
- title: "HttpError",
99
- description: "Generic response after a failed operation"
100
- });
96
+ }).optional()
97
+ }).meta({ title: "HttpError" }).describe("Generic response after a failed operation");
101
98
  //#endregion
102
99
  //#region ../../src/server/core/services/HttpClient.ts
103
100
  var HttpClient = class {
@@ -387,8 +384,9 @@ var ValidationError = class extends HttpError {
387
384
  let fullMessage = message;
388
385
  let details;
389
386
  if (cause instanceof TypeBoxError) {
390
- fullMessage = `${message}: ${cause.cause.message}`;
391
- if (cause.cause.instancePath) details = cause.cause.instancePath;
387
+ const path = cause.cause.instancePath;
388
+ fullMessage = `${message}: ${cause.cause.message}${path ? ` (${path})` : ""}`;
389
+ if (path) details = path;
392
390
  }
393
391
  super({
394
392
  message: fullMessage,
@@ -437,14 +435,11 @@ var ServerReply = class {
437
435
  };
438
436
  //#endregion
439
437
  //#region ../../src/server/core/schemas/okSchema.ts
440
- const okSchema = t.object({
441
- ok: t.boolean({ description: "True when operation succeed" }),
442
- id: t.optional(t.union([t.text(), t.integer()])),
443
- count: t.optional(t.number({ description: "Number of resources affected" }))
444
- }, {
445
- title: "Ok",
446
- description: "Generic response after a successful operation on a resource"
447
- });
438
+ const okSchema = z.object({
439
+ ok: z.boolean().describe("True when operation succeed"),
440
+ id: z.union([z.text(), z.integer()]).optional(),
441
+ count: z.number().describe("Number of resources affected").optional()
442
+ }).meta({ title: "Ok" }).describe("Generic response after a successful operation on a resource");
448
443
  //#endregion
449
444
  //#region ../../src/server/core/index.browser.ts
450
445
  const AlephaServer = $module({
@@ -1 +1 @@
1
- {"version":3,"file":"index.browser.js","names":[],"sources":["../../../src/server/core/errors/HttpError.ts","../../../src/server/core/helpers/isMultipart.ts","../../../src/server/core/schemas/errorSchema.ts","../../../src/server/core/services/HttpClient.ts","../../../src/server/core/constants/routeMethods.ts","../../../src/server/core/errors/BadRequestError.ts","../../../src/server/core/errors/ConflictError.ts","../../../src/server/core/errors/ForbiddenError.ts","../../../src/server/core/errors/NotFoundError.ts","../../../src/server/core/errors/UnauthorizedError.ts","../../../src/server/core/errors/ValidationError.ts","../../../src/server/core/helpers/ServerReply.ts","../../../src/server/core/schemas/okSchema.ts","../../../src/server/core/index.browser.ts"],"sourcesContent":["import { AlephaError } from \"alepha\";\nimport type { ErrorSchema } from \"../schemas/errorSchema.ts\";\n\nexport const isHttpError = (\n error: unknown,\n status?: number,\n): error is HttpErrorLike => {\n const isError =\n !!error &&\n typeof error === \"object\" &&\n \"message\" in error &&\n typeof error.message === \"string\" &&\n \"status\" in error &&\n typeof error.status === \"number\";\n\n if (!isError) {\n return false;\n }\n\n if (status) {\n return (error as HttpErrorLike).status === status;\n }\n\n return true;\n};\n\nexport class HttpError extends AlephaError {\n public name = \"HttpError\";\n\n static is = isHttpError;\n\n static toJSON(error: HttpError): ErrorSchema {\n const json: Record<string, unknown> = {\n error: error.error,\n status: error.status,\n message: error.message,\n };\n\n if (error.details) json.details = error.details;\n if (error.requestId) json.requestId = error.requestId;\n if (error.reason) json.cause = error.reason;\n\n return json as ErrorSchema;\n }\n\n public readonly error: string;\n public readonly status: number;\n\n public readonly requestId?: string;\n public readonly details?: string;\n public readonly reason?: {\n name: string;\n message: string;\n };\n\n constructor(options: Partial<ErrorSchema>, cause?: unknown) {\n super(options.message, {\n cause,\n });\n\n this.status = options.status ?? 500;\n this.details = options.details;\n this.requestId = options.requestId;\n\n if (typeof options.cause === \"object\") {\n this.reason = {\n name: (options.cause as { name: string }).name,\n message: (options.cause as { message: string }).message,\n };\n } else if (cause instanceof Error) {\n this.reason = {\n name: cause.name,\n message: cause.message,\n };\n }\n\n if (this.constructor.name === \"HttpError\") {\n this.error =\n options.error ?? errorNameByStatus[this.status] ?? \"HttpError\";\n } else {\n this.error = this.constructor.name;\n }\n }\n}\n\nexport const errorNameByStatus: Record<number, string> = {\n 400: \"BadRequestError\",\n 401: \"UnauthorizedError\",\n 403: \"ForbiddenError\",\n 404: \"NotFoundError\",\n 405: \"MethodNotAllowedError\",\n 409: \"ConflictError\",\n 410: \"GoneError\",\n 413: \"PayloadTooLargeError\",\n 415: \"UnsupportedMediaTypeError\",\n 429: \"TooManyRequestsError\",\n 500: \"InternalServerError\",\n 501: \"NotImplementedError\",\n 502: \"BadGatewayError\",\n 503: \"ServiceUnavailableError\",\n 504: \"GatewayTimeoutError\",\n};\n\nexport interface HttpErrorLike extends Error {\n status: number;\n}\n","import type { RequestConfigSchema } from \"../interfaces/ServerRequest.ts\";\n\n/**\n * Checks if the route has multipart/form-data request body.\n */\nexport const isMultipart = (options: {\n schema?: RequestConfigSchema;\n contentType?: string;\n requestBodyType?: string;\n}): boolean => {\n if (\n options.contentType === \"multipart/form-data\" ||\n options.requestBodyType === \"multipart/form-data\"\n ) {\n return true;\n }\n\n if (options.schema?.body && \"properties\" in options.schema.body) {\n const properties: Record<string, any> = options.schema.body.properties;\n for (const key in properties) {\n if (properties[key].format === \"binary\") {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { type Static, t } from \"alepha\";\n\nexport const errorSchema = t.object(\n {\n error: t.text({ description: \"HTTP error name\" }),\n status: t.integer({\n description: \"HTTP status code\",\n }),\n message: t.text({\n description: \"Short text which describe the error\",\n size: \"rich\",\n }),\n details: t.optional(\n t.text({\n description: \"Detailed description of the error\",\n size: \"rich\",\n }),\n ),\n requestId: t.optional(t.text()),\n cause: t.optional(\n t.object({\n name: t.text(),\n message: t.text({\n description: \"Cause Error message\",\n size: \"rich\",\n }),\n }),\n ),\n },\n {\n title: \"HttpError\",\n description: \"Generic response after a failed operation\",\n },\n);\n\nexport type ErrorSchema = Static<typeof errorSchema>;\n","import {\n $inject,\n Alepha,\n AlephaError,\n type FileLike,\n isFileLike,\n type Static,\n type TObject,\n type TSchema,\n} from \"alepha\";\nimport { $cache } from \"alepha/cache\";\nimport type { DurationLike } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport { HttpError } from \"../errors/HttpError.ts\";\nimport { isMultipart } from \"../helpers/isMultipart.ts\";\nimport type {\n ServerRequestConfigEntry,\n TRequestBody,\n TResponseBody,\n} from \"../interfaces/ServerRequest.ts\";\nimport type { ClientRequestOptions } from \"../primitives/$action.ts\";\nimport { errorSchema } from \"../schemas/errorSchema.ts\";\n\nexport class HttpClient {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n\n public readonly cache = $cache<HttpClientCache>({\n provider: \"memory\",\n name: \"http:client\",\n });\n\n protected readonly pendingRequests: HttpClientPendingRequests = {};\n\n public async fetchAction(args: FetchActionArgs): Promise<FetchResponse> {\n const route = args.action; // our link to fetch\n const options = args.options ?? {}; // fetch standard options, cache, etc.\n const config = args.config ?? {}; // params, query, body, etc.\n const host = args.host ?? \"\"; // remote host, e.g. \"https://api.example.com\" or empty (for browser)\n\n const request: RequestInit = {\n ...options.request,\n };\n\n const method = route.method;\n const headers: Record<string, string> = {};\n const url = this.url(host, route, config);\n\n await this.alepha.events.emit(\"client:onRequest\", {\n route,\n config,\n options,\n headers,\n request,\n });\n\n request.method ??= method;\n\n await this.body(request, headers, route, config);\n\n request.headers = {\n ...config.headers,\n ...Object.fromEntries(new Headers(request.headers).entries()),\n ...headers,\n };\n\n return await this.fetch(url, {\n ...request,\n schema: route.schema,\n ...options,\n });\n }\n\n public async fetch<T extends TSchema>(\n url: string,\n request: RequestInitWithOptions<T> = {}, // standard options\n ): Promise<FetchResponse<Static<T>>> {\n const options = {\n cache: request.localCache,\n schema: request.schema?.response,\n key: request.key,\n };\n\n request.method ??= \"GET\";\n\n this.log.trace(\"Request\", {\n url,\n method: request.method,\n body: request.body,\n headers: request.headers,\n options,\n });\n\n // Only add automatic ETag if user didn't explicitly provide headers\n const cached = await this.cache.get(url);\n if (cached && request.method === \"GET\") {\n if (cached.etag) {\n request.headers = new Headers(request.headers);\n if (!request.headers.has(\"if-none-match\")) {\n request.headers.set(\"if-none-match\", cached.etag);\n }\n } else {\n return {\n data: cached.data as Static<T>,\n status: 200,\n statusText: \"OK\",\n headers: new Headers(),\n };\n }\n }\n\n await this.alepha.events.emit(\"client:beforeFetch\", {\n url,\n options,\n request,\n });\n\n // Deduplicate concurrent identical requests for idempotent methods only.\n // Non-idempotent methods (POST, PUT, PATCH, DELETE) must always execute\n // since each call may produce a different side effect.\n const isIdempotent =\n request.method === \"GET\" ||\n request.method === \"HEAD\" ||\n request.method === \"OPTIONS\";\n const key =\n options.key ??\n (isIdempotent\n ? JSON.stringify({ url, method: request.method })\n : undefined);\n\n if (key) {\n const existing = this.pendingRequests[key];\n if (existing) {\n this.log.info(\"Request already pending\", key);\n return existing;\n }\n }\n\n const promise = fetch(url, request)\n .then(async (response) => {\n this.log.debug(\"Response\", {\n url,\n status: response.status,\n });\n\n const fetchResponse: FetchResponse = {\n data: await this.responseData(response, options),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n raw: response,\n };\n\n if (request.method === \"GET\") {\n if (options.cache) {\n await this.cache.set(\n url,\n { data: fetchResponse.data },\n typeof options.cache === \"boolean\" ? undefined : options.cache,\n );\n } else if (!this.alepha.isBrowser()) {\n // only cache etag on server, browser can handle etag itself\n const etag = response.headers.get(\"etag\") ?? undefined;\n if (etag) {\n await this.cache.set(url, { data: fetchResponse.data, etag });\n }\n }\n }\n\n return fetchResponse;\n })\n .finally(() => {\n if (key) {\n delete this.pendingRequests[key];\n }\n });\n\n if (key) {\n this.pendingRequests[key] = promise;\n }\n\n return promise;\n }\n\n protected url(\n host: string,\n action: HttpAction,\n args: ServerRequestConfigEntry,\n ) {\n let url = host;\n\n if (action.prefix) {\n url += action.prefix;\n }\n\n url += action.path;\n url = this.pathVariables(url, action, args);\n url = this.queryParams(url, action, args);\n\n return url;\n }\n\n protected async body(\n init: RequestInit,\n headers: Record<string, string>,\n action: HttpAction,\n args: ServerRequestConfigEntry = {},\n ) {\n const hasHeader =\n typeof init.headers === \"object\" &&\n \"content-type\" in init.headers &&\n init.headers[\"content-type\"] === \"multipart/form-data\";\n\n if (hasHeader || isMultipart(action)) {\n if (typeof init.headers === \"object\" && \"content-type\" in init.headers) {\n delete (init.headers as Record<string, unknown>)[\"content-type\"]; // fetch() will fill this for us\n }\n\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(args.body ?? {})) {\n if (typeof value === \"string\") {\n formData.append(key, value);\n continue;\n }\n if (value instanceof Blob) {\n formData.append(key, value);\n continue;\n }\n if (isFileLike(value)) {\n // FileLike must be transformed to WebFile\n formData.append(\n key,\n new File([await value.arrayBuffer()], value.name, {\n type: value.type,\n }),\n );\n }\n }\n\n init.body = formData;\n\n return;\n }\n\n if (!init.body && action.schema?.body) {\n headers[\"content-type\"] = \"application/json\";\n init.body = this.alepha.codec.encode(action.schema?.body, args.body, {\n as: \"string\",\n });\n }\n }\n\n protected async responseData(\n response: Response,\n options: FetchOptions,\n ): Promise<any> {\n if (response.status === 304) {\n let cacheKey = response.url;\n if (typeof window !== \"undefined\") {\n cacheKey = cacheKey.replace(window.location.origin, \"\");\n }\n\n const cached = await this.cache.get(cacheKey);\n if (cached) {\n return cached.data;\n }\n\n // if no cached data (etag-only routes), return empty string\n return \"\";\n }\n\n if (response.status === 204) {\n return;\n }\n\n if (this.isMaybeFile(response)) {\n return this.createFileLike(response);\n }\n\n if (response.headers.get(\"Content-Type\")?.startsWith(\"text/\")) {\n return await response.text();\n }\n\n if (response.headers.get(\"Content-Type\") === \"application/json\") {\n const json = await response.json();\n\n if (response.status >= 400) {\n const jsonError = this.alepha.codec.decode(errorSchema, json);\n const error = new HttpError(jsonError);\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n if (options.schema) {\n return this.alepha.codec.decode(options.schema, json);\n }\n\n return json;\n }\n\n if (response.status >= 400) {\n const error = new HttpError({\n status: response.status,\n message: `An error occurred while fetching the resource. (${response.statusText})`,\n });\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n return response;\n }\n\n protected isMaybeFile(response: Response): boolean {\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType) {\n return false;\n }\n\n if (response.headers.get(\"Content-Disposition\")?.includes(\"attachment\")) {\n return true; // If Content-Disposition indicates an attachment, treat it as a file\n }\n\n return (\n contentType.startsWith(\"application/octet-stream\") ||\n contentType.startsWith(\"application/pdf\") ||\n contentType.startsWith(\"application/zip\") ||\n contentType.startsWith(\"image/\") ||\n contentType.startsWith(\"video/\") ||\n contentType.startsWith(\"audio/\")\n );\n }\n\n protected createFileLike(response: Response, defaultFileName = \"\"): FileLike {\n const match = (response.headers.get(\"Content-Disposition\") ?? \"\").match(\n /filename=\"(.+)\"/,\n );\n return {\n name: match?.[1] ? match[1] : defaultFileName,\n type: response.headers.get(\"Content-Type\") ?? \"application/octet-stream\",\n size: Number(response.headers.get(\"Content-Length\") ?? 0),\n lastModified: Date.now(),\n stream: () => {\n throw new AlephaError(\"Not implemented\");\n },\n arrayBuffer: async () => {\n return await response.arrayBuffer();\n },\n text: async () => {\n return await response.text();\n },\n };\n }\n\n public pathVariables(\n url: string,\n action: { schema?: { params?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.params === \"object\") {\n const params = action.schema?.params\n ? (this.alepha.codec.decode(\n action.schema.params,\n args.params,\n ) as Record<string, any>)\n : args.params;\n\n for (const key of Object.keys(params)) {\n url = url.replace(`:${key}`, params[key]);\n url = url.replace(`{${key}}`, params[key]);\n }\n }\n\n return url;\n }\n\n public queryParams(\n url: string,\n action: { schema?: { query?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.query === \"object\") {\n const query = action.schema?.query\n ? this.alepha.codec.decode(action.schema.query, args.query ?? {})\n : args.query;\n\n for (const key of Object.keys(query)) {\n if (query[key] === undefined) {\n delete query[key];\n }\n if (typeof query[key] === \"object\") {\n query[key] = JSON.stringify(query[key]);\n }\n }\n\n const params = new URLSearchParams(\n query as Record<string, string>,\n ).toString();\n return params ? `${url}?${params}` : url;\n }\n return url;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface FetchOptions<T extends TSchema = TSchema> {\n /**\n * Key to identify the request in the pending requests.\n */\n key?: string;\n\n /**\n * The schema to validate the response against.\n */\n schema?: {\n response?: T;\n };\n\n /**\n * Built-in cache options.\n */\n localCache?: boolean | number | DurationLike;\n}\n\nexport type RequestInitWithOptions<T extends TSchema = TSchema> = RequestInit &\n FetchOptions<T>;\n\nexport interface FetchResponse<T = any> {\n data: T;\n status: number;\n statusText: string;\n headers: Headers;\n raw?: Response;\n}\n\nexport type HttpClientPendingRequests = Record<\n string,\n Promise<any> | undefined\n>;\n\ninterface HttpClientCache {\n data: any;\n etag?: string;\n}\n\nexport interface FetchActionArgs {\n action: HttpAction;\n host?: string;\n config?: ServerRequestConfigEntry;\n options?: ClientRequestOptions;\n}\n\nexport interface HttpAction {\n method?: string;\n prefix?: string;\n path: string;\n contentType?: string;\n requestBodyType?: string;\n schema?: {\n params?: TObject;\n query?: TObject;\n body?: TRequestBody;\n response?: TResponseBody;\n };\n}\n","export const routeMethods = [\n // list of supported http methods\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n \"CONNECT\",\n \"TRACE\",\n] as const;\n\nexport type RouteMethod = (typeof routeMethods)[number];\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class BadRequestError extends HttpError {\n constructor(message = \"Invalid request body\", cause?: unknown) {\n super(\n {\n message,\n status: 400,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ConflictError extends HttpError {\n constructor(message = \"Entity already exists\", cause?: unknown) {\n super(\n {\n message,\n status: 409,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ForbiddenError extends HttpError {\n constructor(\n message = \"No permission to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 403,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class NotFoundError extends HttpError {\n constructor(message = \"Resource not found\", cause?: unknown) {\n super(\n {\n message,\n status: 404,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class UnauthorizedError extends HttpError {\n readonly name = \"UnauthorizedError\";\n\n constructor(\n message = \"Not allowed to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 401,\n },\n cause,\n );\n }\n}\n","import { TypeBoxError } from \"alepha\";\nimport { HttpError } from \"./HttpError.ts\";\n\nexport class ValidationError extends HttpError {\n constructor(message = \"Validation has failed\", cause?: unknown) {\n let fullMessage = message;\n let details: string | undefined;\n\n if (cause instanceof TypeBoxError) {\n fullMessage = `${message}: ${cause.cause.message}`;\n if (cause.cause.instancePath) {\n details = cause.cause.instancePath;\n }\n }\n\n super(\n {\n message: fullMessage,\n status: 400,\n details,\n },\n cause,\n );\n }\n}\n","/**\n * Helper for building server replies.\n */\nexport class ServerReply {\n // TODO: make it private\n public headers: Record<string, string> & {\n \"set-cookie\"?: string[];\n } = {};\n\n public status?: number; // default 200, or 204 (no content)\n\n public body?: any;\n\n /**\n * Redirect to a given URL with optional status code (default 302).\n */\n public redirect(url: string, status: number = 302): void {\n this.status = status;\n this.headers.location = url;\n }\n\n // TODO: check if status / header is already set and throw an error if so (for allow to override with force flag)\n\n /**\n * Set the response status code.\n */\n public setStatus(status: number): this {\n this.status = status;\n return this;\n }\n\n /**\n * Set a response header.\n */\n public setHeader(name: string, value: string): this {\n this.headers[name.toLowerCase()] = value;\n return this;\n }\n\n /**\n * Set the response body.\n */\n public setBody(body: any): this {\n this.body = body;\n return this;\n }\n}\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\n\nexport const okSchema = t.object(\n {\n ok: t.boolean({ description: \"True when operation succeed\" }),\n id: t.optional(t.union([t.text(), t.integer()])),\n count: t.optional(\n t.number({ description: \"Number of resources affected\" }),\n ),\n },\n {\n title: \"Ok\",\n description: \"Generic response after a successful operation on a resource\",\n },\n);\n\nexport type Ok = Static<typeof okSchema>;\n","import { $module } from \"alepha\";\nimport { HttpClient } from \"./services/HttpClient.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./index.shared.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const AlephaServer = $module({\n name: \"alepha.server\",\n primitives: [],\n services: [HttpClient],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.browser.js","names":[],"sources":["../../../src/server/core/errors/HttpError.ts","../../../src/server/core/helpers/isMultipart.ts","../../../src/server/core/schemas/errorSchema.ts","../../../src/server/core/services/HttpClient.ts","../../../src/server/core/constants/routeMethods.ts","../../../src/server/core/errors/BadRequestError.ts","../../../src/server/core/errors/ConflictError.ts","../../../src/server/core/errors/ForbiddenError.ts","../../../src/server/core/errors/NotFoundError.ts","../../../src/server/core/errors/UnauthorizedError.ts","../../../src/server/core/errors/ValidationError.ts","../../../src/server/core/helpers/ServerReply.ts","../../../src/server/core/schemas/okSchema.ts","../../../src/server/core/index.browser.ts"],"sourcesContent":["import { AlephaError } from \"alepha\";\nimport type { ErrorSchema } from \"../schemas/errorSchema.ts\";\n\nexport const isHttpError = (\n error: unknown,\n status?: number,\n): error is HttpErrorLike => {\n const isError =\n !!error &&\n typeof error === \"object\" &&\n \"message\" in error &&\n typeof error.message === \"string\" &&\n \"status\" in error &&\n typeof error.status === \"number\";\n\n if (!isError) {\n return false;\n }\n\n if (status) {\n return (error as HttpErrorLike).status === status;\n }\n\n return true;\n};\n\nexport class HttpError extends AlephaError {\n public name = \"HttpError\";\n\n static is = isHttpError;\n\n static toJSON(error: HttpError): ErrorSchema {\n const json: Record<string, unknown> = {\n error: error.error,\n status: error.status,\n message: error.message,\n };\n\n if (error.details) json.details = error.details;\n if (error.requestId) json.requestId = error.requestId;\n if (error.reason) json.cause = error.reason;\n\n return json as ErrorSchema;\n }\n\n public readonly error: string;\n public readonly status: number;\n\n public readonly requestId?: string;\n public readonly details?: string;\n public readonly reason?: {\n name: string;\n message: string;\n };\n\n constructor(options: Partial<ErrorSchema>, cause?: unknown) {\n super(options.message, {\n cause,\n });\n\n this.status = options.status ?? 500;\n this.details = options.details;\n this.requestId = options.requestId;\n\n if (typeof options.cause === \"object\") {\n this.reason = {\n name: (options.cause as { name: string }).name,\n message: (options.cause as { message: string }).message,\n };\n } else if (cause instanceof Error) {\n this.reason = {\n name: cause.name,\n message: cause.message,\n };\n }\n\n if (this.constructor.name === \"HttpError\") {\n this.error =\n options.error ?? errorNameByStatus[this.status] ?? \"HttpError\";\n } else {\n this.error = this.constructor.name;\n }\n }\n}\n\nexport const errorNameByStatus: Record<number, string> = {\n 400: \"BadRequestError\",\n 401: \"UnauthorizedError\",\n 403: \"ForbiddenError\",\n 404: \"NotFoundError\",\n 405: \"MethodNotAllowedError\",\n 409: \"ConflictError\",\n 410: \"GoneError\",\n 413: \"PayloadTooLargeError\",\n 415: \"UnsupportedMediaTypeError\",\n 429: \"TooManyRequestsError\",\n 500: \"InternalServerError\",\n 501: \"NotImplementedError\",\n 502: \"BadGatewayError\",\n 503: \"ServiceUnavailableError\",\n 504: \"GatewayTimeoutError\",\n};\n\nexport interface HttpErrorLike extends Error {\n status: number;\n}\n","import { z } from \"alepha\";\nimport type { RequestConfigSchema } from \"../interfaces/ServerRequest.ts\";\n\n/**\n * Checks if the route has multipart/form-data request body.\n */\nexport const isMultipart = (options: {\n schema?: RequestConfigSchema;\n contentType?: string;\n requestBodyType?: string;\n}): boolean => {\n if (\n options.contentType === \"multipart/form-data\" ||\n options.requestBodyType === \"multipart/form-data\"\n ) {\n return true;\n }\n\n if (options.schema?.body && \"properties\" in options.schema.body) {\n const properties: Record<string, any> = options.schema.body.properties;\n for (const key in properties) {\n if (z.schema.format(properties[key]) === \"binary\") {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { type Static, z } from \"alepha\";\n\nexport const errorSchema = z\n .object({\n error: z.text({ description: \"HTTP error name\" }),\n status: z.integer().describe(\"HTTP status code\"),\n message: z.text({\n description: \"Short text which describe the error\",\n size: \"rich\",\n }),\n details: z\n .text({\n description: \"Detailed description of the error\",\n size: \"rich\",\n })\n .optional(),\n requestId: z.text().optional(),\n cause: z\n .object({\n name: z.text(),\n message: z.text({\n description: \"Cause Error message\",\n size: \"rich\",\n }),\n })\n .optional(),\n })\n .meta({ title: \"HttpError\" })\n .describe(\"Generic response after a failed operation\");\n\nexport type ErrorSchema = Static<typeof errorSchema>;\n","import {\n $inject,\n Alepha,\n AlephaError,\n type FileLike,\n isFileLike,\n type Static,\n type TObject,\n type TSchema,\n} from \"alepha\";\nimport { $cache } from \"alepha/cache\";\nimport type { DurationLike } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport { HttpError } from \"../errors/HttpError.ts\";\nimport { isMultipart } from \"../helpers/isMultipart.ts\";\nimport type {\n ServerRequestConfigEntry,\n TRequestBody,\n TResponseBody,\n} from \"../interfaces/ServerRequest.ts\";\nimport type { ClientRequestOptions } from \"../primitives/$action.ts\";\nimport { errorSchema } from \"../schemas/errorSchema.ts\";\n\nexport class HttpClient {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n\n public readonly cache = $cache<HttpClientCache>({\n provider: \"memory\",\n name: \"http:client\",\n });\n\n protected readonly pendingRequests: HttpClientPendingRequests = {};\n\n public async fetchAction(args: FetchActionArgs): Promise<FetchResponse> {\n const route = args.action; // our link to fetch\n const options = args.options ?? {}; // fetch standard options, cache, etc.\n const config = args.config ?? {}; // params, query, body, etc.\n const host = args.host ?? \"\"; // remote host, e.g. \"https://api.example.com\" or empty (for browser)\n\n const request: RequestInit = {\n ...options.request,\n };\n\n const method = route.method;\n const headers: Record<string, string> = {};\n const url = this.url(host, route, config);\n\n await this.alepha.events.emit(\"client:onRequest\", {\n route,\n config,\n options,\n headers,\n request,\n });\n\n request.method ??= method;\n\n await this.body(request, headers, route, config);\n\n request.headers = {\n ...config.headers,\n ...Object.fromEntries(new Headers(request.headers).entries()),\n ...headers,\n };\n\n return await this.fetch(url, {\n ...request,\n schema: route.schema,\n ...options,\n });\n }\n\n public async fetch<T extends TSchema>(\n url: string,\n request: RequestInitWithOptions<T> = {}, // standard options\n ): Promise<FetchResponse<Static<T>>> {\n const options = {\n cache: request.localCache,\n schema: request.schema?.response,\n key: request.key,\n };\n\n request.method ??= \"GET\";\n\n this.log.trace(\"Request\", {\n url,\n method: request.method,\n body: request.body,\n headers: request.headers,\n options,\n });\n\n // Only add automatic ETag if user didn't explicitly provide headers\n const cached = await this.cache.get(url);\n if (cached && request.method === \"GET\") {\n if (cached.etag) {\n request.headers = new Headers(request.headers);\n if (!request.headers.has(\"if-none-match\")) {\n request.headers.set(\"if-none-match\", cached.etag);\n }\n } else {\n return {\n data: cached.data as Static<T>,\n status: 200,\n statusText: \"OK\",\n headers: new Headers(),\n };\n }\n }\n\n await this.alepha.events.emit(\"client:beforeFetch\", {\n url,\n options,\n request,\n });\n\n // Deduplicate concurrent identical requests for idempotent methods only.\n // Non-idempotent methods (POST, PUT, PATCH, DELETE) must always execute\n // since each call may produce a different side effect.\n const isIdempotent =\n request.method === \"GET\" ||\n request.method === \"HEAD\" ||\n request.method === \"OPTIONS\";\n const key =\n options.key ??\n (isIdempotent\n ? JSON.stringify({ url, method: request.method })\n : undefined);\n\n if (key) {\n const existing = this.pendingRequests[key];\n if (existing) {\n this.log.info(\"Request already pending\", key);\n return existing;\n }\n }\n\n const promise = fetch(url, request)\n .then(async (response) => {\n this.log.debug(\"Response\", {\n url,\n status: response.status,\n });\n\n const fetchResponse: FetchResponse = {\n data: await this.responseData(response, options),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n raw: response,\n };\n\n if (request.method === \"GET\") {\n if (options.cache) {\n await this.cache.set(\n url,\n { data: fetchResponse.data },\n typeof options.cache === \"boolean\" ? undefined : options.cache,\n );\n } else if (!this.alepha.isBrowser()) {\n // only cache etag on server, browser can handle etag itself\n const etag = response.headers.get(\"etag\") ?? undefined;\n if (etag) {\n await this.cache.set(url, { data: fetchResponse.data, etag });\n }\n }\n }\n\n return fetchResponse;\n })\n .finally(() => {\n if (key) {\n delete this.pendingRequests[key];\n }\n });\n\n if (key) {\n this.pendingRequests[key] = promise;\n }\n\n return promise;\n }\n\n protected url(\n host: string,\n action: HttpAction,\n args: ServerRequestConfigEntry,\n ) {\n let url = host;\n\n if (action.prefix) {\n url += action.prefix;\n }\n\n url += action.path;\n url = this.pathVariables(url, action, args);\n url = this.queryParams(url, action, args);\n\n return url;\n }\n\n protected async body(\n init: RequestInit,\n headers: Record<string, string>,\n action: HttpAction,\n args: ServerRequestConfigEntry = {},\n ) {\n const hasHeader =\n typeof init.headers === \"object\" &&\n \"content-type\" in init.headers &&\n init.headers[\"content-type\"] === \"multipart/form-data\";\n\n if (hasHeader || isMultipart(action)) {\n if (typeof init.headers === \"object\" && \"content-type\" in init.headers) {\n delete (init.headers as Record<string, unknown>)[\"content-type\"]; // fetch() will fill this for us\n }\n\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(args.body ?? {})) {\n if (typeof value === \"string\") {\n formData.append(key, value);\n continue;\n }\n if (value instanceof Blob) {\n formData.append(key, value);\n continue;\n }\n if (isFileLike(value)) {\n // FileLike must be transformed to WebFile\n formData.append(\n key,\n new File([await value.arrayBuffer()], value.name, {\n type: value.type,\n }),\n );\n }\n }\n\n init.body = formData;\n\n return;\n }\n\n if (!init.body && action.schema?.body) {\n headers[\"content-type\"] = \"application/json\";\n init.body = this.alepha.codec.encode(action.schema?.body, args.body, {\n as: \"string\",\n });\n }\n }\n\n protected async responseData(\n response: Response,\n options: ResolvedFetchOptions,\n ): Promise<any> {\n if (response.status === 304) {\n let cacheKey = response.url;\n if (typeof window !== \"undefined\") {\n cacheKey = cacheKey.replace(window.location.origin, \"\");\n }\n\n const cached = await this.cache.get(cacheKey);\n if (cached) {\n return cached.data;\n }\n\n // if no cached data (etag-only routes), return empty string\n return \"\";\n }\n\n if (response.status === 204) {\n return;\n }\n\n if (this.isMaybeFile(response)) {\n return this.createFileLike(response);\n }\n\n if (response.headers.get(\"Content-Type\")?.startsWith(\"text/\")) {\n return await response.text();\n }\n\n if (response.headers.get(\"Content-Type\") === \"application/json\") {\n const json = await response.json();\n\n if (response.status >= 400) {\n const jsonError = this.alepha.codec.decode(errorSchema, json);\n const error = new HttpError(jsonError);\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n if (options.schema) {\n return this.alepha.codec.decode(options.schema, json);\n }\n\n return json;\n }\n\n if (response.status >= 400) {\n const error = new HttpError({\n status: response.status,\n message: `An error occurred while fetching the resource. (${response.statusText})`,\n });\n\n await this.alepha.events.emit(\"client:onError\", {\n error,\n });\n\n throw error;\n }\n\n return response;\n }\n\n protected isMaybeFile(response: Response): boolean {\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType) {\n return false;\n }\n\n if (response.headers.get(\"Content-Disposition\")?.includes(\"attachment\")) {\n return true; // If Content-Disposition indicates an attachment, treat it as a file\n }\n\n return (\n contentType.startsWith(\"application/octet-stream\") ||\n contentType.startsWith(\"application/pdf\") ||\n contentType.startsWith(\"application/zip\") ||\n contentType.startsWith(\"image/\") ||\n contentType.startsWith(\"video/\") ||\n contentType.startsWith(\"audio/\")\n );\n }\n\n protected createFileLike(response: Response, defaultFileName = \"\"): FileLike {\n const match = (response.headers.get(\"Content-Disposition\") ?? \"\").match(\n /filename=\"(.+)\"/,\n );\n return {\n name: match?.[1] ? match[1] : defaultFileName,\n type: response.headers.get(\"Content-Type\") ?? \"application/octet-stream\",\n size: Number(response.headers.get(\"Content-Length\") ?? 0),\n lastModified: Date.now(),\n stream: () => {\n throw new AlephaError(\"Not implemented\");\n },\n arrayBuffer: async () => {\n return await response.arrayBuffer();\n },\n text: async () => {\n return await response.text();\n },\n };\n }\n\n public pathVariables(\n url: string,\n action: { schema?: { params?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.params === \"object\") {\n const params = action.schema?.params\n ? (this.alepha.codec.decode(\n action.schema.params,\n args.params,\n ) as Record<string, any>)\n : args.params;\n\n for (const key of Object.keys(params)) {\n url = url.replace(`:${key}`, params[key]);\n url = url.replace(`{${key}}`, params[key]);\n }\n }\n\n return url;\n }\n\n public queryParams(\n url: string,\n action: { schema?: { query?: TObject } },\n args: ServerRequestConfigEntry = {},\n ): string {\n if (typeof args.query === \"object\") {\n const query = action.schema?.query\n ? this.alepha.codec.decode(action.schema.query, args.query ?? {})\n : args.query;\n\n for (const key of Object.keys(query)) {\n if (query[key] === undefined) {\n delete query[key];\n }\n if (typeof query[key] === \"object\") {\n query[key] = JSON.stringify(query[key]);\n }\n }\n\n const params = new URLSearchParams(\n query as Record<string, string>,\n ).toString();\n return params ? `${url}?${params}` : url;\n }\n return url;\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface FetchOptions<T extends TSchema = TSchema> {\n /**\n * Key to identify the request in the pending requests.\n */\n key?: string;\n\n /**\n * The schema to validate the response against.\n */\n schema?: {\n response?: T;\n };\n\n /**\n * Built-in cache options.\n */\n localCache?: boolean | number | DurationLike;\n}\n\nexport type RequestInitWithOptions<T extends TSchema = TSchema> = RequestInit &\n FetchOptions<T>;\n\n/**\n * Internal resolved fetch options — built in {@link HttpClient.fetch},\n * consumed by {@link HttpClient.responseData} and the `client:beforeFetch`\n * event. Distinct from the external {@link FetchOptions}: `schema` is the\n * already-unwrapped response schema and `cache` is the resolved cache directive.\n */\nexport interface ResolvedFetchOptions {\n key?: string;\n schema?: TSchema;\n cache?: boolean | number | DurationLike;\n}\n\nexport interface FetchResponse<T = any> {\n data: T;\n status: number;\n statusText: string;\n headers: Headers;\n raw?: Response;\n}\n\nexport type HttpClientPendingRequests = Record<\n string,\n Promise<any> | undefined\n>;\n\ninterface HttpClientCache {\n data: any;\n etag?: string;\n}\n\nexport interface FetchActionArgs {\n action: HttpAction;\n host?: string;\n config?: ServerRequestConfigEntry;\n options?: ClientRequestOptions;\n}\n\nexport interface HttpAction {\n method?: string;\n prefix?: string;\n path: string;\n contentType?: string;\n requestBodyType?: string;\n schema?: {\n params?: TObject;\n query?: TObject;\n body?: TRequestBody;\n response?: TResponseBody;\n };\n}\n","export const routeMethods = [\n // list of supported http methods\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n \"CONNECT\",\n \"TRACE\",\n] as const;\n\nexport type RouteMethod = (typeof routeMethods)[number];\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class BadRequestError extends HttpError {\n constructor(message = \"Invalid request body\", cause?: unknown) {\n super(\n {\n message,\n status: 400,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ConflictError extends HttpError {\n constructor(message = \"Entity already exists\", cause?: unknown) {\n super(\n {\n message,\n status: 409,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class ForbiddenError extends HttpError {\n constructor(\n message = \"No permission to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 403,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class NotFoundError extends HttpError {\n constructor(message = \"Resource not found\", cause?: unknown) {\n super(\n {\n message,\n status: 404,\n },\n cause,\n );\n }\n}\n","import { HttpError } from \"./HttpError.ts\";\n\nexport class UnauthorizedError extends HttpError {\n readonly name = \"UnauthorizedError\";\n\n constructor(\n message = \"Not allowed to access this resource\",\n cause?: unknown,\n ) {\n super(\n {\n message,\n status: 401,\n },\n cause,\n );\n }\n}\n","import { TypeBoxError } from \"alepha\";\nimport { HttpError } from \"./HttpError.ts\";\n\nexport class ValidationError extends HttpError {\n constructor(message = \"Validation has failed\", cause?: unknown) {\n let fullMessage = message;\n let details: string | undefined;\n\n if (cause instanceof TypeBoxError) {\n const path = cause.cause.instancePath;\n fullMessage = `${message}: ${cause.cause.message}${\n path ? ` (${path})` : \"\"\n }`;\n if (path) {\n details = path;\n }\n }\n\n super(\n {\n message: fullMessage,\n status: 400,\n details,\n },\n cause,\n );\n }\n}\n","/**\n * Helper for building server replies.\n */\nexport class ServerReply {\n // TODO: make it private\n public headers: Record<string, string> & {\n \"set-cookie\"?: string[];\n } = {};\n\n public status?: number; // default 200, or 204 (no content)\n\n public body?: any;\n\n /**\n * Redirect to a given URL with optional status code (default 302).\n */\n public redirect(url: string, status: number = 302): void {\n this.status = status;\n this.headers.location = url;\n }\n\n // TODO: check if status / header is already set and throw an error if so (for allow to override with force flag)\n\n /**\n * Set the response status code.\n */\n public setStatus(status: number): this {\n this.status = status;\n return this;\n }\n\n /**\n * Set a response header.\n */\n public setHeader(name: string, value: string): this {\n this.headers[name.toLowerCase()] = value;\n return this;\n }\n\n /**\n * Set the response body.\n */\n public setBody(body: any): this {\n this.body = body;\n return this;\n }\n}\n","import type { Static } from \"alepha\";\nimport { z } from \"alepha\";\n\nexport const okSchema = z\n .object({\n ok: z.boolean().describe(\"True when operation succeed\"),\n id: z.union([z.text(), z.integer()]).optional(),\n count: z.number().describe(\"Number of resources affected\").optional(),\n })\n .meta({ title: \"Ok\" })\n .describe(\"Generic response after a successful operation on a resource\");\n\nexport type Ok = Static<typeof okSchema>;\n","import { $module } from \"alepha\";\nimport { HttpClient } from \"./services/HttpClient.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./index.shared.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const AlephaServer = $module({\n name: \"alepha.server\",\n primitives: [],\n services: [HttpClient],\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Alepha, AlephaError, Async, FileLike, KIND, Middleware, PipelineHandler, PipelinePrimitive, PipelinePrimitiveOptions, Primitive, Static, StreamLike, TArray, TFile, TObject, TRecord, TSchema, TStream, TString, TVoid } from "alepha";
1
+ import { Alepha, AlephaError, Async, FileLike, KIND, Middleware, PipelineHandler, PipelinePrimitive, PipelinePrimitiveOptions, Primitive, SchemaOutput, Static, StreamLike, TArray, TFile, TObject, TRecord, TSchema, TStream, TString, TVoid } from "alepha";
2
2
  import { Readable, Transform } from "node:stream";
3
3
  import { DateTimeProvider, DurationLike } from "alepha/datetime";
4
4
  import { ReadableStream as ReadableStream$1 } from "node:stream/web";
@@ -7,26 +7,25 @@ import { Route, RouterProvider } from "alepha/router";
7
7
  import { IncomingMessage, Server, ServerResponse as ServerResponse$1 } from "node:http";
8
8
  import { ServerResponse as ServerResponse$2, ServerRoute as ServerRoute$1 } from "alepha/server";
9
9
  import { Socket } from "node:net";
10
-
11
10
  //#region ../../src/server/core/schemas/errorSchema.d.ts
12
- declare const errorSchema: import("typebox").TObject<{
13
- error: import("typebox").TString;
14
- status: import("typebox").TInteger;
15
- message: import("typebox").TString;
16
- details: import("typebox").TOptional<import("typebox").TString>;
17
- requestId: import("typebox").TOptional<import("typebox").TString>;
18
- cause: import("typebox").TOptional<import("typebox").TObject<{
19
- name: import("typebox").TString;
20
- message: import("typebox").TString;
21
- }>>;
22
- }>;
11
+ declare const errorSchema: import("zod").ZodObject<{
12
+ error: import("zod").ZodString;
13
+ status: import("zod").ZodInt;
14
+ message: import("zod").ZodString;
15
+ details: import("zod").ZodOptional<import("zod").ZodString>;
16
+ requestId: import("zod").ZodOptional<import("zod").ZodString>;
17
+ cause: import("zod").ZodOptional<import("zod").ZodObject<{
18
+ name: import("zod").ZodString;
19
+ message: import("zod").ZodString;
20
+ }, import("zod/v4/core").$strip>>;
21
+ }, import("zod/v4/core").$strip>;
23
22
  type ErrorSchema = Static<typeof errorSchema>;
24
23
  //#endregion
25
24
  //#region ../../src/server/core/errors/HttpError.d.ts
26
25
  declare const isHttpError: (error: unknown, status?: number) => error is HttpErrorLike;
27
26
  declare class HttpError extends AlephaError {
28
27
  name: string;
29
- static is: (error: unknown, status?: number) => error is HttpErrorLike;
28
+ static is: typeof isHttpError;
30
29
  static toJSON(error: HttpError): ErrorSchema;
31
30
  readonly error: string;
32
31
  readonly status: number;
@@ -102,10 +101,10 @@ interface RequestConfigSchema {
102
101
  response?: TResponseBody;
103
102
  }
104
103
  interface ServerRequestConfig<TConfig extends RequestConfigSchema = RequestConfigSchema> {
105
- body: TConfig["body"] extends TRequestBody ? Static<TConfig["body"]> : any;
106
- headers: TConfig["headers"] extends TObject ? Static<TConfig["headers"]> : Record<string, string>;
107
- params: TConfig["params"] extends TObject ? Static<TConfig["params"]> : Record<string, string>;
108
- query: TConfig["query"] extends TObject ? Static<TConfig["query"]> : Record<string, any>;
104
+ body: SchemaOutput<TConfig["body"], any>;
105
+ headers: SchemaOutput<TConfig["headers"], Record<string, string>>;
106
+ params: SchemaOutput<TConfig["params"], Record<string, string>>;
107
+ query: SchemaOutput<TConfig["query"], Record<string, any>>;
109
108
  }
110
109
  type ServerRequestConfigEntry<TConfig extends RequestConfigSchema = RequestConfigSchema> = Partial<ServerRequestConfig<TConfig>>;
111
110
  interface ServerRequest<TConfig extends RequestConfigSchema = RequestConfigSchema> extends ServerRequestConfig<TConfig> {
@@ -223,7 +222,7 @@ interface ServerRoute<TConfig extends RequestConfigSchema = RequestConfigSchema>
223
222
  type ServerRouteInput<TConfig extends RequestConfigSchema = RequestConfigSchema> = Omit<ServerRoute<TConfig>, "handler"> & {
224
223
  handler: PipelineHandler | ServerHandler<TConfig>;
225
224
  };
226
- type ServerResponseBody<TConfig extends RequestConfigSchema = RequestConfigSchema> = TConfig["response"] extends TResponseBody ? Static<TConfig["response"]> : ResponseBodyType;
225
+ type ServerResponseBody<TConfig extends RequestConfigSchema = RequestConfigSchema> = SchemaOutput<TConfig["response"], ResponseBodyType>;
227
226
  type ResponseKind = "json" | "text" | "void" | "file" | "any";
228
227
  type ResponseBodyType = string | Buffer | StreamLike | undefined | null | void;
229
228
  type ServerHandler<TConfig extends RequestConfigSchema = RequestConfigSchema> = (request: ServerRequest<TConfig>) => Async<ServerResponseBody<TConfig>>;
@@ -310,7 +309,7 @@ declare class ServerRequestParser {
310
309
  protected readonly rootURL: URL;
311
310
  createServerRequest(partialRawRequest: Partial<ServerRequestData>): ServerRequest;
312
311
  getRequestId(request: ServerRequestData): string;
313
- getRequestUserAgent(request: ServerRequestData): UserAgentInfo;
312
+ getRequestUserAgent(request: ServerRequestData): import("alepha/server").UserAgentInfo;
314
313
  getRequestIp(request: ServerRequestData): string | undefined;
315
314
  protected getConnectionIp(request: ServerRequestData): string | undefined;
316
315
  getRequestGeo(request: ServerRequestData): RequestGeo;
@@ -431,6 +430,15 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
431
430
  validateRequest(route: {
432
431
  schema?: RequestConfigSchema;
433
432
  }, request: ServerRequestConfig): void;
433
+ /**
434
+ * Coerce a raw query/header value (always a string on the wire) to the JS
435
+ * type its schema declares, mirroring `z.coerce` at the HTTP boundary.
436
+ *
437
+ * Only the boundary coerces — request bodies and the ORM stay strict. Values
438
+ * that can't be coerced are passed through unchanged so the subsequent
439
+ * validation produces a proper rejection. Arrays coerce element-wise.
440
+ */
441
+ protected coerceParam(schema: unknown, value: unknown): unknown;
434
442
  }
435
443
  interface PushMiddlewareOptions {
436
444
  method?: RouteMethod | RouteMethod[];
@@ -528,7 +536,7 @@ declare class HttpClient {
528
536
  fetch<T extends TSchema>(url: string, request?: RequestInitWithOptions<T>): Promise<FetchResponse<Static<T>>>;
529
537
  protected url(host: string, action: HttpAction, args: ServerRequestConfigEntry): string;
530
538
  protected body(init: RequestInit, headers: Record<string, string>, action: HttpAction, args?: ServerRequestConfigEntry): Promise<void>;
531
- protected responseData(response: Response, options: FetchOptions): Promise<any>;
539
+ protected responseData(response: Response, options: ResolvedFetchOptions): Promise<any>;
532
540
  protected isMaybeFile(response: Response): boolean;
533
541
  protected createFileLike(response: Response, defaultFileName?: string): FileLike;
534
542
  pathVariables(url: string, action: {
@@ -559,6 +567,17 @@ interface FetchOptions<T extends TSchema = TSchema> {
559
567
  localCache?: boolean | number | DurationLike;
560
568
  }
561
569
  type RequestInitWithOptions<T extends TSchema = TSchema> = RequestInit & FetchOptions<T>;
570
+ /**
571
+ * Internal resolved fetch options — built in {@link HttpClient.fetch},
572
+ * consumed by {@link HttpClient.responseData} and the `client:beforeFetch`
573
+ * event. Distinct from the external {@link FetchOptions}: `schema` is the
574
+ * already-unwrapped response schema and `cache` is the resolved cache directive.
575
+ */
576
+ interface ResolvedFetchOptions {
577
+ key?: string;
578
+ schema?: TSchema;
579
+ cache?: boolean | number | DurationLike;
580
+ }
562
581
  interface FetchResponse<T = any> {
563
582
  data: T;
564
583
  status: number;
@@ -630,17 +649,17 @@ interface HttpAction {
630
649
  * getUsers = $action({
631
650
  * path: "/users",
632
651
  * schema: {
633
- * query: t.object({
634
- * page: t.optional(t.number({ default: 1 })),
635
- * limit: t.optional(t.number({ default: 10 }))
652
+ * query: z.object({
653
+ * page: z.number({ default: 1 }).optional(),
654
+ * limit: z.number({ default: 10 }).optional()
636
655
  * }),
637
- * response: t.object({
638
- * users: t.array(t.object({
639
- * id: t.text(),
640
- * name: t.text(),
641
- * email: t.text()
656
+ * response: z.object({
657
+ * users: z.array(z.object({
658
+ * id: z.text(),
659
+ * name: z.text(),
660
+ * email: z.text()
642
661
  * })),
643
- * total: t.number()
662
+ * total: z.number()
644
663
  * })
645
664
  * },
646
665
  * handler: async ({ query }) => {
@@ -653,11 +672,11 @@ interface HttpAction {
653
672
  * method: "POST",
654
673
  * path: "/users",
655
674
  * schema: {
656
- * body: t.object({
657
- * name: t.text(),
658
- * email: t.text({ format: "email" })
675
+ * body: z.object({
676
+ * name: z.text(),
677
+ * email: z.text({ format: "email" })
659
678
  * }),
660
- * response: t.object({ id: t.text(), name: t.text() })
679
+ * response: z.object({ id: z.text(), name: z.text() })
661
680
  * },
662
681
  * handler: async ({ body }) => {
663
682
  * return await this.userService.create(body);
@@ -739,9 +758,9 @@ interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema> extends Om
739
758
  /**
740
759
  * Server API configuration atom.
741
760
  */
742
- declare const serverApiOptions: import("alepha").Atom<TObject<{
743
- prefix: import("typebox").TString;
744
- }>, "alepha.server.api.options">;
761
+ declare const serverApiOptions: import("alepha").Atom<import("zod").ZodObject<{
762
+ prefix: import("zod").ZodString;
763
+ }, import("zod/v4/core").$strip>, "alepha.server.api.options">;
745
764
  type ServerApiOptions = Static<typeof serverApiOptions.schema>;
746
765
  declare module "alepha" {
747
766
  interface State {
@@ -792,12 +811,12 @@ declare class ActionPrimitive<TConfig extends RequestConfigSchema> extends Pipel
792
811
  interface ActionPrimitiveFn<TConfig extends RequestConfigSchema> extends ActionPrimitive<TConfig> {
793
812
  (config?: ClientRequestEntry<TConfig>, options?: ClientRequestOptions): Promise<ClientRequestResponse<TConfig>>;
794
813
  }
795
- type ClientRequestEntry<TConfig extends RequestConfigSchema, T = ClientRequestEntryContainer<TConfig>> = { [K in keyof T as T[K] extends undefined ? never : K]: T[K] };
814
+ type ClientRequestEntry<TConfig extends RequestConfigSchema, T = ClientRequestEntryContainer<TConfig>> = { [K in keyof T as T[K] extends undefined ? never : K]: T[K]; };
796
815
  type ClientRequestEntryContainer<TConfig extends RequestConfigSchema> = {
797
- body: TConfig["body"] extends TRequestBody ? Static<TConfig["body"]> : undefined;
798
- params: TConfig["params"] extends TObject ? Static<TConfig["params"]> : undefined;
799
- headers?: TConfig["headers"] extends TObject ? Static<TConfig["headers"]> : Record<string, string>;
800
- query?: TConfig["query"] extends TObject ? Partial<Static<TConfig["query"]>> : Record<string, string>;
816
+ body: SchemaOutput<TConfig["body"], undefined>;
817
+ params: SchemaOutput<TConfig["params"], undefined>;
818
+ headers?: SchemaOutput<TConfig["headers"], Record<string, string>>;
819
+ query?: Partial<SchemaOutput<TConfig["query"], Record<string, string>>>;
801
820
  };
802
821
  interface ClientRequestOptions extends FetchOptions {
803
822
  /**
@@ -810,7 +829,7 @@ interface ClientRequestOptions extends FetchOptions {
810
829
  */
811
830
  query?: Record<string, string | number | boolean>;
812
831
  }
813
- type ClientRequestResponse<TConfig extends RequestConfigSchema> = TConfig["response"] extends TSchema ? Static<TConfig["response"]> : any;
832
+ type ClientRequestResponse<TConfig extends RequestConfigSchema> = SchemaOutput<TConfig["response"], any>;
814
833
  /**
815
834
  * Specific handler for server actions.
816
835
  */
@@ -866,11 +885,11 @@ declare const isMultipart: (options: {
866
885
  }) => boolean;
867
886
  //#endregion
868
887
  //#region ../../src/server/core/schemas/okSchema.d.ts
869
- declare const okSchema: import("typebox").TObject<{
870
- ok: import("typebox").TBoolean;
871
- id: import("typebox").TOptional<import("typebox").TUnion<[import("typebox").TString, import("typebox").TInteger]>>;
872
- count: import("typebox").TOptional<import("typebox").TNumber>;
873
- }>;
888
+ declare const okSchema: import("zod").ZodObject<{
889
+ ok: import("zod").ZodBoolean;
890
+ id: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodInt]>>;
891
+ count: import("zod").ZodOptional<import("zod").ZodNumber>;
892
+ }, import("zod/v4/core").$strip>;
874
893
  type Ok = Static<typeof okSchema>;
875
894
  //#endregion
876
895
  //#region ../../src/server/core/primitives/$circuit.d.ts
@@ -1144,9 +1163,9 @@ declare class SseFetchResponse<T> implements AsyncIterable<T> {
1144
1163
  * class NotificationController {
1145
1164
  * events = $sse({
1146
1165
  * schema: {
1147
- * data: t.object({
1148
- * type: t.text(),
1149
- * message: t.text(),
1166
+ * data: z.object({
1167
+ * type: z.text(),
1168
+ * message: z.text(),
1150
1169
  * }),
1151
1170
  * },
1152
1171
  * handler: async ({ emit, close }) => {
@@ -1237,7 +1256,7 @@ type SseEventData<TConfig extends SseConfigSchema> = TConfig["data"] extends TSc
1237
1256
  /**
1238
1257
  * Request entry type for SSE endpoints (body, params, query, headers).
1239
1258
  */
1240
- type SseRequestEntry<TConfig extends SseConfigSchema, T = SseRequestEntryContainer<TConfig>> = { [K in keyof T as T[K] extends undefined ? never : K]: T[K] };
1259
+ type SseRequestEntry<TConfig extends SseConfigSchema, T = SseRequestEntryContainer<TConfig>> = { [K in keyof T as T[K] extends undefined ? never : K]: T[K]; };
1241
1260
  /**
1242
1261
  * Full container type for SSE request entries.
1243
1262
  */
@@ -1249,10 +1268,10 @@ type SseRequestEntryContainer<TConfig extends SseConfigSchema> = {
1249
1268
  };
1250
1269
  //#endregion
1251
1270
  //#region ../../src/server/core/providers/BunHttpServerProvider.d.ts
1252
- declare const envSchema$1: import("alepha").TObject<{
1253
- SERVER_PORT: import("alepha").TInteger;
1254
- SERVER_HOST: import("alepha").TString;
1255
- }>;
1271
+ declare const envSchema$1: import("zod").ZodObject<{
1272
+ SERVER_PORT: import("zod").ZodDefault<import("zod").ZodInt>;
1273
+ SERVER_HOST: import("zod").ZodString;
1274
+ }, import("zod/v4/core").$strip>;
1256
1275
  declare module "alepha" {
1257
1276
  interface Env extends Partial<Static<typeof envSchema$1>> {}
1258
1277
  }
@@ -1274,10 +1293,10 @@ declare class BunHttpServerProvider extends ServerProvider {
1274
1293
  }
1275
1294
  //#endregion
1276
1295
  //#region ../../src/server/core/providers/NodeHttpServerProvider.d.ts
1277
- declare const envSchema: import("alepha").TObject<{
1278
- SERVER_PORT: import("alepha").TInteger;
1279
- SERVER_HOST: import("alepha").TString;
1280
- }>;
1296
+ declare const envSchema: import("zod").ZodObject<{
1297
+ SERVER_PORT: import("zod").ZodDefault<import("zod").ZodInt>;
1298
+ SERVER_HOST: import("zod").ZodString;
1299
+ }, import("zod/v4/core").$strip>;
1281
1300
  declare module "alepha" {
1282
1301
  interface Env extends Partial<Static<typeof envSchema>> {}
1283
1302
  }
@@ -1327,10 +1346,10 @@ declare class NodeHttpServerProvider extends ServerProvider {
1327
1346
  /**
1328
1347
  * Compression configuration atom.
1329
1348
  */
1330
- declare const compressOptions: import("alepha").Atom<import("typebox").TObject<{
1331
- disabled: import("typebox").TOptional<import("typebox").TBoolean>;
1332
- allowedContentTypes: import("typebox").TArray<import("typebox").TString>;
1333
- }>, "alepha.server.compress.options">;
1349
+ declare const compressOptions: import("alepha").Atom<import("zod").ZodObject<{
1350
+ disabled: import("zod").ZodOptional<import("zod").ZodBoolean>;
1351
+ allowedContentTypes: import("zod").ZodArray<import("zod").ZodString>;
1352
+ }, import("zod/v4/core").$strip>, "alepha.server.compress.options">;
1334
1353
  type CompressOptions = Static<typeof compressOptions.schema>;
1335
1354
  declare module "alepha" {
1336
1355
  interface State {
@@ -1363,22 +1382,34 @@ declare class ServerCompressProvider {
1363
1382
  /**
1364
1383
  * Helmet security headers configuration atom
1365
1384
  */
1366
- declare const helmetOptions: import("alepha").Atom<import("typebox").TObject<{
1367
- disabled: import("typebox").TOptional<import("typebox").TBoolean>;
1368
- isSecure: import("typebox").TOptional<import("typebox").TBoolean>;
1369
- strictTransportSecurity: import("typebox").TOptional<import("typebox").TObject<{
1370
- maxAge: import("typebox").TOptional<import("typebox").TNumber>;
1371
- includeSubDomains: import("typebox").TOptional<import("typebox").TBoolean>;
1372
- preload: import("typebox").TOptional<import("typebox").TBoolean>;
1385
+ declare const helmetOptions: import("alepha").Atom<import("zod").ZodObject<{
1386
+ disabled: import("zod").ZodOptional<import("zod").ZodBoolean>;
1387
+ isSecure: import("zod").ZodOptional<import("zod").ZodBoolean>;
1388
+ strictTransportSecurity: import("zod").ZodOptional<import("zod").ZodObject<{
1389
+ maxAge: import("zod").ZodOptional<import("zod").ZodNumber>;
1390
+ includeSubDomains: import("zod").ZodOptional<import("zod").ZodBoolean>;
1391
+ preload: import("zod").ZodOptional<import("zod").ZodBoolean>;
1392
+ }, import("zod/v4/core").$strip>>;
1393
+ xContentTypeOptions: import("zod").ZodOptional<import("zod").ZodBoolean>;
1394
+ xFrameOptions: import("zod").ZodOptional<import("zod").ZodEnum<{
1395
+ DENY: "DENY";
1396
+ SAMEORIGIN: "SAMEORIGIN";
1373
1397
  }>>;
1374
- xContentTypeOptions: import("typebox").TOptional<import("typebox").TBoolean>;
1375
- xFrameOptions: import("typebox").TOptional<import("typebox").TUnsafe<"DENY" | "SAMEORIGIN">>;
1376
- xXssProtection: import("typebox").TOptional<import("typebox").TBoolean>;
1377
- contentSecurityPolicy: import("typebox").TOptional<import("typebox").TObject<{
1378
- directives: import("typebox").TRecord<"^.*$", import("typebox").TAny>;
1398
+ xXssProtection: import("zod").ZodOptional<import("zod").ZodBoolean>;
1399
+ contentSecurityPolicy: import("zod").ZodOptional<import("zod").ZodObject<{
1400
+ directives: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>;
1401
+ }, import("zod/v4/core").$strip>>;
1402
+ referrerPolicy: import("zod").ZodOptional<import("zod").ZodEnum<{
1403
+ "no-referrer": "no-referrer";
1404
+ "no-referrer-when-downgrade": "no-referrer-when-downgrade";
1405
+ origin: "origin";
1406
+ "origin-when-cross-origin": "origin-when-cross-origin";
1407
+ "same-origin": "same-origin";
1408
+ "strict-origin": "strict-origin";
1409
+ "strict-origin-when-cross-origin": "strict-origin-when-cross-origin";
1410
+ "unsafe-url": "unsafe-url";
1379
1411
  }>>;
1380
- referrerPolicy: import("typebox").TOptional<import("typebox").TUnsafe<"no-referrer" | "no-referrer-when-downgrade" | "origin" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url">>;
1381
- }>, "alepha.server.helmet.options">;
1412
+ }, import("zod/v4/core").$strip>, "alepha.server.helmet.options">;
1382
1413
  type HelmetOptions = Static<typeof helmetOptions.schema>;
1383
1414
  declare module "alepha" {
1384
1415
  interface State {
@@ -1458,11 +1489,11 @@ declare class ServerLoggerProvider {
1458
1489
  /**
1459
1490
  * Multipart configuration atom.
1460
1491
  */
1461
- declare const multipartOptions: import("alepha").Atom<import("typebox").TObject<{
1462
- limit: import("typebox").TInteger;
1463
- fileLimit: import("typebox").TInteger;
1464
- fileCount: import("typebox").TInteger;
1465
- }>, "alepha.server.multipart.options">;
1492
+ declare const multipartOptions: import("alepha").Atom<import("zod").ZodObject<{
1493
+ limit: import("zod").ZodDefault<import("zod").ZodInt>;
1494
+ fileLimit: import("zod").ZodDefault<import("zod").ZodInt>;
1495
+ fileCount: import("zod").ZodDefault<import("zod").ZodInt>;
1496
+ }, import("zod/v4/core").$strip>, "alepha.server.multipart.options">;
1466
1497
  type MultipartOptions = Static<typeof multipartOptions.schema>;
1467
1498
  declare module "alepha" {
1468
1499
  interface State {
@@ -1561,7 +1592,7 @@ declare module "alepha" {
1561
1592
  };
1562
1593
  "client:beforeFetch": {
1563
1594
  url: string;
1564
- options: FetchOptions;
1595
+ options: ResolvedFetchOptions;
1565
1596
  request: RequestInit;
1566
1597
  };
1567
1598
  "client:onError": {
@@ -1593,5 +1624,5 @@ declare module "alepha" {
1593
1624
  */
1594
1625
  declare const AlephaServer: import("alepha").Service<import("alepha").Module>;
1595
1626
  //#endregion
1596
- export { $action, $circuit, $middleware, $route, $sse, ActionPrimitive, ActionPrimitiveFn, ActionPrimitiveOptions, AlephaServer, BadRequestError, BunHttpServerProvider, CircuitBreakerOptions, ClientRequestEntry, ClientRequestEntryContainer, ClientRequestOptions, ClientRequestResponse, CompressOptions, ConflictError, CspDirectives, CspOptions, ErrorSchema, FetchActionArgs, FetchOptions, FetchResponse, ForbiddenError, HelmetOptions, HstsOptions, HttpAction, HttpClient, HttpClientPendingRequests, HttpError, HttpErrorLike, MultipartOptions, NodeHttpServerProvider, NodeRequestEvent, NotFoundError, Ok, PushMiddlewareOptions, RequestConfigSchema, RequestGeo, RequestInitWithOptions, RequestReferer, ResponseBodyType, ResponseKind, RouteMethod, RoutePrimitive, RoutePrimitiveOptions, ServerActionHandler, ServerActionRequest, ServerApiOptions, ServerCompressProvider, ServerHandler, ServerHelmetProvider, ServerLoggerProvider, ServerMiddlewarePrimitive, ServerMiddlewarePrimitiveOptions, ServerMultipartProvider, ServerNotReadyProvider, ServerProvider, ServerRawRequest, ServerReply, ServerRequest, ServerRequestConfig, ServerRequestConfigEntry, ServerRequestData, ServerResponse, ServerResponseBody, ServerRoute, ServerRouteInput, ServerRouteMatcher, ServerRouteRequestHandler, ServerRouterProvider, ServerTimingProvider, SseConfigSchema, SseEventData, SseFetchResponse, SseHandler, SseHandlerContext, SsePrimitive, SsePrimitiveFn, SsePrimitiveOptions, SseRequestEntry, SseRequestEntryContainer, SseStream, TRequestBody, TResponseBody, UnauthorizedError, UserAgentInfo, UserAgentParser, ValidationError, WebRequestEvent, compressOptions, errorNameByStatus, errorSchema, helmetOptions, isHttpError, isMultipart, multipartOptions, okSchema, routeMethods, serverApiOptions };
1627
+ export { $action, $circuit, $middleware, $route, $sse, ActionPrimitive, ActionPrimitiveFn, ActionPrimitiveOptions, AlephaServer, BadRequestError, BunHttpServerProvider, CircuitBreakerOptions, ClientRequestEntry, ClientRequestEntryContainer, ClientRequestOptions, ClientRequestResponse, CompressOptions, ConflictError, CspDirectives, CspOptions, ErrorSchema, FetchActionArgs, FetchOptions, FetchResponse, ForbiddenError, HelmetOptions, HstsOptions, HttpAction, HttpClient, HttpClientPendingRequests, HttpError, HttpErrorLike, MultipartOptions, NodeHttpServerProvider, NodeRequestEvent, NotFoundError, Ok, PushMiddlewareOptions, RequestConfigSchema, RequestGeo, RequestInitWithOptions, RequestReferer, ResolvedFetchOptions, ResponseBodyType, ResponseKind, RouteMethod, RoutePrimitive, RoutePrimitiveOptions, ServerActionHandler, ServerActionRequest, ServerApiOptions, ServerCompressProvider, ServerHandler, ServerHelmetProvider, ServerLoggerProvider, ServerMiddlewarePrimitive, ServerMiddlewarePrimitiveOptions, ServerMultipartProvider, ServerNotReadyProvider, ServerProvider, ServerRawRequest, ServerReply, ServerRequest, ServerRequestConfig, ServerRequestConfigEntry, ServerRequestData, ServerResponse, ServerResponseBody, ServerRoute, ServerRouteInput, ServerRouteMatcher, ServerRouteRequestHandler, ServerRouterProvider, ServerTimingProvider, SseConfigSchema, SseEventData, SseFetchResponse, SseHandler, SseHandlerContext, SsePrimitive, SsePrimitiveFn, SsePrimitiveOptions, SseRequestEntry, SseRequestEntryContainer, SseStream, TRequestBody, TResponseBody, UnauthorizedError, UserAgentInfo, UserAgentParser, ValidationError, WebRequestEvent, compressOptions, errorNameByStatus, errorSchema, helmetOptions, isHttpError, isMultipart, multipartOptions, okSchema, routeMethods, serverApiOptions };
1597
1628
  //# sourceMappingURL=index.d.ts.map