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, t } from "alepha";
1
+ import { $inject, z } from "alepha";
2
2
  import { $route, type ServerReply } from "alepha/server";
3
3
  import { MemoryPaymentProvider } from "../providers/MemoryPaymentProvider.ts";
4
4
  import { PaymentProvider } from "../providers/PaymentProvider.ts";
@@ -34,38 +34,89 @@ const renderPage = (opts: {
34
34
  <html lang="en">
35
35
  <head>
36
36
  <meta charset="utf-8" />
37
- <title>Mock checkout</title>
37
+ <title>Checkout</title>
38
38
  <meta name="viewport" content="width=device-width, initial-scale=1" />
39
39
  <style>
40
- :root { color-scheme: light dark; font-family: system-ui, sans-serif; }
41
- body { display:flex; min-height:100vh; align-items:center; justify-content:center; margin:0; background:#f6f7f9; }
42
- .card { background:#fff; padding:2rem; border-radius:12px; box-shadow:0 8px 24px rgba(0,0,0,.08); max-width:380px; width:100%; }
43
- h1 { margin:0 0 .25rem; font-size:1.1rem; }
44
- .badge { display:inline-block; background:#fef3c7; color:#92400e; font-size:.7rem; padding:2px 8px; border-radius:999px; margin-bottom:.75rem; }
45
- .amount { font-size:2rem; font-weight:600; margin:.75rem 0 1.25rem; }
46
- .row { display:flex; gap:.5rem; }
47
- button { flex:1; padding:.75rem 1rem; border-radius:8px; border:0; font-size:.95rem; cursor:pointer; }
48
- .pay { background:#16a34a; color:#fff; }
49
- .cancel { background:#e5e7eb; color:#111; }
50
- .meta { font-size:.75rem; color:#6b7280; margin-top:1rem; word-break:break-all; }
40
+ :root { color-scheme: light; }
41
+ * { box-sizing: border-box; }
42
+ body {
43
+ display:flex; min-height:100vh; align-items:center; justify-content:center;
44
+ margin:0; padding:1rem; background:#f8fafc; color:#0b1120;
45
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
46
+ }
47
+ .card {
48
+ background:#fff; border:1px solid #e2e8f0; border-radius:16px;
49
+ box-shadow:0 12px 40px rgba(11,17,32,.08); max-width:400px; width:100%;
50
+ overflow:hidden;
51
+ }
52
+ .head { padding:1.5rem 1.75rem 1.25rem; border-bottom:1px solid #e2e8f0; }
53
+ .badge {
54
+ display:inline-flex; align-items:center; gap:.35rem;
55
+ background:#fff7ed; color:#c2410c; border:1px solid #fed7aa;
56
+ font-size:.7rem; font-weight:600; letter-spacing:.04em;
57
+ padding:3px 10px; border-radius:999px; text-transform:uppercase;
58
+ }
59
+ .label { margin:.9rem 0 0; font-size:.8rem; color:#64748b; }
60
+ .amount { font-size:2.25rem; font-weight:800; letter-spacing:-.02em; margin:.15rem 0 0; }
61
+ .body { padding:1.5rem 1.75rem 1.75rem; }
62
+ .field { margin-bottom: .9rem; }
63
+ .field label { display:block; font-size:.75rem; font-weight:600; color:#334155; margin-bottom:.3rem; }
64
+ .field input {
65
+ width:100%; padding:.65rem .8rem; border:1px solid #e2e8f0; border-radius:10px;
66
+ font-size:.9rem; background:#f8fafc; color:#475569; font-family:inherit;
67
+ }
68
+ .grid { display:grid; grid-template-columns:1fr 1fr; gap:.75rem; }
69
+ .pay {
70
+ width:100%; padding:.85rem 1rem; border-radius:999px; border:0; cursor:pointer;
71
+ background:#f97316; color:#fff; font-size:1rem; font-weight:700; font-family:inherit;
72
+ box-shadow:0 6px 20px rgba(249,115,22,.35); transition:transform .15s, box-shadow .15s;
73
+ }
74
+ .pay:hover { transform:translateY(-1px); box-shadow:0 10px 26px rgba(249,115,22,.45); }
75
+ .cancel {
76
+ width:100%; margin-top:.6rem; padding:.7rem 1rem; border-radius:999px; cursor:pointer;
77
+ background:transparent; border:0; color:#64748b; font-size:.85rem; font-family:inherit;
78
+ }
79
+ .cancel:hover { color:#0b1120; }
80
+ .secure {
81
+ display:flex; align-items:center; justify-content:center; gap:.35rem;
82
+ font-size:.72rem; color:#94a3b8; margin-top:1rem;
83
+ }
84
+ .meta { font-size:.68rem; color:#cbd5e1; margin-top:.75rem; word-break:break-all; text-align:center; }
51
85
  </style>
52
86
  </head>
53
87
  <body>
54
88
  <div class="card">
55
- <span class="badge">DEV — mock checkout</span>
56
- <h1>Confirm payment</h1>
57
- <div class="amount">${escapeHtml(opts.amount)}</div>
58
- <div class="row">
59
- <form method="post" action="/payments/mock-checkout/${opts.intentId}/cancel">
89
+ <div class="head">
90
+ <span class="badge">Mode test — paiement simulé</span>
91
+ <p class="label">Montant à payer</p>
92
+ <p class="amount">${escapeHtml(opts.amount)}</p>
93
+ </div>
94
+ <div class="body">
95
+ <div class="field">
96
+ <label for="cc-num">Numéro de carte</label>
97
+ <input id="cc-num" value="4242 4242 4242 4242" readonly />
98
+ </div>
99
+ <div class="grid">
100
+ <div class="field">
101
+ <label for="cc-exp">Expiration</label>
102
+ <input id="cc-exp" value="12 / 34" readonly />
103
+ </div>
104
+ <div class="field">
105
+ <label for="cc-cvc">CVC</label>
106
+ <input id="cc-cvc" value="123" readonly />
107
+ </div>
108
+ </div>
109
+ <form method="post" action="/payments/mock-checkout/${opts.intentId}/confirm">
60
110
  <input type="hidden" name="returnUrl" value="${escapeHtml(opts.returnUrl)}" />
61
- <button type="submit" class="cancel">Cancel</button>
111
+ <button type="submit" class="pay">Payer ${escapeHtml(opts.amount)}</button>
62
112
  </form>
63
- <form method="post" action="/payments/mock-checkout/${opts.intentId}/confirm">
113
+ <form method="post" action="/payments/mock-checkout/${opts.intentId}/cancel">
64
114
  <input type="hidden" name="returnUrl" value="${escapeHtml(opts.returnUrl)}" />
65
- <button type="submit" class="pay">Pay</button>
115
+ <button type="submit" class="cancel">Annuler et revenir au site</button>
66
116
  </form>
117
+ <p class="secure">&#128274; Aucune carte n'est débitée — environnement de développement</p>
118
+ <p class="meta">intent: ${opts.intentId}</p>
67
119
  </div>
68
- <div class="meta">intent: ${opts.intentId}</div>
69
120
  </div>
70
121
  </body>
71
122
  </html>`;
@@ -101,8 +152,8 @@ export class MockCheckoutController {
101
152
  method: "GET",
102
153
  path: `${this.url}/:id`,
103
154
  schema: {
104
- params: t.object({ id: t.uuid() }),
105
- query: t.object({ returnUrl: t.optional(t.text({ size: "rich" })) }),
155
+ params: z.object({ id: z.uuid() }),
156
+ query: z.object({ returnUrl: z.text({ size: "rich" }).optional() }),
106
157
  },
107
158
  handler: async ({ params, query, reply }) => {
108
159
  if (!this.isMemoryProvider()) return this.forbidden(reply);
@@ -120,8 +171,8 @@ export class MockCheckoutController {
120
171
  method: "POST",
121
172
  path: `${this.url}/:id/confirm`,
122
173
  schema: {
123
- params: t.object({ id: t.uuid() }),
124
- body: t.object({ returnUrl: t.optional(t.text({ size: "rich" })) }),
174
+ params: z.object({ id: z.uuid() }),
175
+ body: z.object({ returnUrl: z.text({ size: "rich" }).optional() }),
125
176
  },
126
177
  handler: async ({ params, body, reply }) => {
127
178
  if (!this.isMemoryProvider()) return this.forbidden(reply);
@@ -134,8 +185,8 @@ export class MockCheckoutController {
134
185
  method: "POST",
135
186
  path: `${this.url}/:id/cancel`,
136
187
  schema: {
137
- params: t.object({ id: t.uuid() }),
138
- body: t.object({ returnUrl: t.optional(t.text({ size: "rich" })) }),
188
+ params: z.object({ id: z.uuid() }),
189
+ body: z.object({ returnUrl: z.text({ size: "rich" }).optional() }),
139
190
  },
140
191
  handler: async ({ params, body, reply }) => {
141
192
  if (!this.isMemoryProvider()) return this.forbidden(reply);
@@ -1,4 +1,4 @@
1
- import { $inject, t } from "alepha";
1
+ import { $inject, z } from "alepha";
2
2
  import { $secure } from "alepha/security";
3
3
  import { $action, okSchema } from "alepha/server";
4
4
  import { PaymentError } from "../errors/PaymentError.ts";
@@ -28,7 +28,7 @@ export class PaymentController {
28
28
  use: [$secure()],
29
29
  description: "List current user's saved payment methods",
30
30
  schema: {
31
- response: t.array(paymentMethodResourceSchema),
31
+ response: z.array(paymentMethodResourceSchema),
32
32
  },
33
33
  handler: ({ user }) => this.paymentMethods.listPaymentMethods(user.id),
34
34
  });
@@ -70,7 +70,7 @@ export class PaymentController {
70
70
  use: [$secure()],
71
71
  description: "Remove own payment method",
72
72
  schema: {
73
- params: t.object({ id: t.uuid() }),
73
+ params: z.object({ id: z.uuid() }),
74
74
  response: okSchema,
75
75
  },
76
76
  handler: async ({ params, user }) => {
@@ -89,7 +89,7 @@ export class PaymentController {
89
89
  use: [$secure()],
90
90
  description: "Set as default payment method",
91
91
  schema: {
92
- params: t.object({ id: t.uuid() }),
92
+ params: z.object({ id: z.uuid() }),
93
93
  response: paymentMethodResourceSchema,
94
94
  },
95
95
  handler: ({ params, user }) =>
@@ -1,17 +1,17 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { $entity, db } from "alepha/orm";
3
3
 
4
4
  export const paymentIntents = $entity({
5
5
  name: "payment_intents",
6
- schema: t.object({
7
- id: db.primaryKey(t.uuid()),
6
+ schema: z.object({
7
+ id: db.primaryKey(z.uuid()),
8
8
  version: db.version(),
9
9
  createdAt: db.createdAt(),
10
10
  updatedAt: db.updatedAt(),
11
11
  organizationId: db.organization(),
12
- amount: t.integer(),
13
- currency: t.text({ size: "short" }),
14
- status: t.enum([
12
+ amount: z.integer(),
13
+ currency: z.text({ size: "short" }),
14
+ status: z.enum([
15
15
  "created",
16
16
  "processing",
17
17
  "authorized",
@@ -23,11 +23,11 @@ export const paymentIntents = $entity({
23
23
  "refunded",
24
24
  "expired",
25
25
  ]),
26
- providerRef: t.optional(t.text()),
27
- providerRaw: t.optional(t.json()),
28
- metadata: t.optional(t.json()),
29
- paymentMethodId: t.optional(t.uuid()),
30
- userId: t.optional(t.uuid()),
26
+ providerRef: z.text().optional(),
27
+ providerRaw: z.json().optional(),
28
+ metadata: z.json().optional(),
29
+ paymentMethodId: z.uuid().optional(),
30
+ userId: z.uuid().optional(),
31
31
  }),
32
32
  indexes: ["status", "organizationId", "userId", "createdAt"],
33
33
  });
@@ -1,22 +1,22 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { $entity, db } from "alepha/orm";
3
3
 
4
4
  export const paymentMethods = $entity({
5
5
  name: "payment_methods",
6
- schema: t.object({
7
- id: db.primaryKey(t.uuid()),
6
+ schema: z.object({
7
+ id: db.primaryKey(z.uuid()),
8
8
  version: db.version(),
9
9
  createdAt: db.createdAt(),
10
10
  updatedAt: db.updatedAt(),
11
11
  organizationId: db.organization(),
12
- userId: t.uuid(),
13
- type: t.text({ size: "short" }),
14
- brand: t.optional(t.text({ size: "short" })),
15
- last4: t.optional(t.text({ size: "short" })),
16
- expMonth: t.optional(t.integer()),
17
- expYear: t.optional(t.integer()),
18
- isDefault: t.boolean(),
19
- providerRef: t.text(),
12
+ userId: z.uuid(),
13
+ type: z.text({ size: "short" }),
14
+ brand: z.text({ size: "short" }).optional(),
15
+ last4: z.text({ size: "short" }).optional(),
16
+ expMonth: z.integer().optional(),
17
+ expYear: z.integer().optional(),
18
+ isDefault: z.boolean(),
19
+ providerRef: z.text(),
20
20
  }),
21
21
  indexes: ["userId", "organizationId"],
22
22
  });
@@ -1,20 +1,20 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { $entity, db } from "alepha/orm";
3
3
 
4
4
  export const refunds = $entity({
5
5
  name: "refunds",
6
- schema: t.object({
7
- id: db.primaryKey(t.uuid()),
6
+ schema: z.object({
7
+ id: db.primaryKey(z.uuid()),
8
8
  version: db.version(),
9
9
  createdAt: db.createdAt(),
10
10
  updatedAt: db.updatedAt(),
11
11
  organizationId: db.organization(),
12
- intentId: t.uuid(),
13
- amount: t.integer(),
14
- currency: t.text({ size: "short" }),
15
- status: t.enum(["pending", "processing", "completed", "failed"]),
16
- reason: t.optional(t.text()),
17
- providerRef: t.optional(t.text()),
12
+ intentId: z.uuid(),
13
+ amount: z.integer(),
14
+ currency: z.text({ size: "short" }),
15
+ status: z.enum(["pending", "processing", "completed", "failed"]),
16
+ reason: z.text().optional(),
17
+ providerRef: z.text().optional(),
18
18
  }),
19
19
  indexes: ["intentId", "organizationId", "status"],
20
20
  });
@@ -11,7 +11,22 @@ export interface RefundResult {
11
11
 
12
12
  export interface WebhookEvent {
13
13
  providerRef: string;
14
+ /**
15
+ * Secondary reference to try when `providerRef` matches no stored intent.
16
+ * Checkout-session events carry BOTH a session id and a PaymentIntent id,
17
+ * while the stored intent ref is whichever existed at session-creation
18
+ * time (the PI when eager, the session id when the PSP creates the PI
19
+ * lazily — e.g. Stripe Checkout on connected accounts).
20
+ */
21
+ providerRefAlt?: string;
14
22
  status: string;
23
+ /**
24
+ * PSP account that emitted the event, when delivered by a
25
+ * connected-accounts endpoint (Stripe: `acct_…` on `connect: true`
26
+ * endpoints). Lets multi-tenant consumers route the event to the right
27
+ * tenant before resolving the intent.
28
+ */
29
+ account?: string;
15
30
  raw: unknown;
16
31
  }
17
32
 
@@ -36,6 +51,8 @@ export abstract class PaymentProvider {
36
51
  authorize?: boolean;
37
52
  stripeAccount?: string;
38
53
  applicationFeeAmount?: number;
54
+ /** Pre-fill the payer's email on the hosted checkout page. */
55
+ customerEmail?: string;
39
56
  },
40
57
  ): Promise<CreateSessionResult>;
41
58
 
@@ -56,6 +73,7 @@ export abstract class PaymentProvider {
56
73
  abstract refundPayment(
57
74
  providerRef: string,
58
75
  amount: number,
76
+ options?: { stripeAccount?: string },
59
77
  ): Promise<RefundResult>;
60
78
 
61
79
  /**
@@ -1,56 +1,56 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
  import { pageQuerySchema } from "alepha/orm";
4
4
  import { paymentIntents } from "../entities/paymentIntents.ts";
5
5
 
6
- export const createIntentSchema = t.object({
7
- amount: t.integer({ minimum: 1 }),
8
- currency: t.text({ size: "short" }),
9
- metadata: t.optional(t.json()),
10
- paymentMethodId: t.optional(t.uuid()),
6
+ export const createIntentSchema = z.object({
7
+ amount: z.integer().min(1),
8
+ currency: z.text({ size: "short" }),
9
+ metadata: z.json().optional(),
10
+ paymentMethodId: z.uuid().optional(),
11
11
  });
12
12
 
13
13
  export type CreateIntent = Static<typeof createIntentSchema>;
14
14
 
15
- export const createCheckoutSchema = t.object({
16
- intentId: t.uuid(),
17
- returnUrl: t.text(),
18
- authorize: t.optional(t.boolean()),
15
+ export const createCheckoutSchema = z.object({
16
+ intentId: z.uuid(),
17
+ returnUrl: z.text(),
18
+ authorize: z.boolean().optional(),
19
19
  });
20
20
 
21
21
  export type CreateCheckout = Static<typeof createCheckoutSchema>;
22
22
 
23
- export const checkoutResponseSchema = t.object({
24
- url: t.text(),
25
- intentId: t.text(),
23
+ export const checkoutResponseSchema = z.object({
24
+ url: z.text(),
25
+ intentId: z.text(),
26
26
  });
27
27
 
28
28
  export type CheckoutResponse = Static<typeof checkoutResponseSchema>;
29
29
 
30
- export const captureIntentSchema = t.object({
31
- amount: t.optional(t.integer({ minimum: 1 })),
30
+ export const captureIntentSchema = z.object({
31
+ amount: z.integer().min(1).optional(),
32
32
  });
33
33
 
34
34
  export type CaptureIntent = Static<typeof captureIntentSchema>;
35
35
 
36
- export const refundIntentSchema = t.object({
37
- amount: t.integer({ minimum: 1 }),
38
- reason: t.optional(t.text()),
36
+ export const refundIntentSchema = z.object({
37
+ amount: z.integer().min(1),
38
+ reason: z.text().optional(),
39
39
  });
40
40
 
41
41
  export type RefundIntent = Static<typeof refundIntentSchema>;
42
42
 
43
- export const recordCashSchema = t.object({
44
- amount: t.integer({ minimum: 1 }),
45
- currency: t.text({ size: "short" }),
46
- metadata: t.optional(t.json()),
43
+ export const recordCashSchema = z.object({
44
+ amount: z.integer().min(1),
45
+ currency: z.text({ size: "short" }),
46
+ metadata: z.json().optional(),
47
47
  });
48
48
 
49
49
  export type RecordCash = Static<typeof recordCashSchema>;
50
50
 
51
- export const intentQuerySchema = t.extend(pageQuerySchema, {
52
- status: t.optional(t.text({ description: "Filter by status" })),
53
- userId: t.optional(t.uuid({ description: "Filter by user ID" })),
51
+ export const intentQuerySchema = pageQuerySchema.extend({
52
+ status: z.text({ description: "Filter by status" }).optional(),
53
+ userId: z.uuid().describe("Filter by user ID").optional(),
54
54
  });
55
55
 
56
56
  export type IntentQuery = Static<typeof intentQuerySchema>;
@@ -1,9 +1,9 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
  import { paymentMethods } from "../entities/paymentMethods.ts";
4
4
 
5
- export const addPaymentMethodSchema = t.object({
6
- token: t.text(),
5
+ export const addPaymentMethodSchema = z.object({
6
+ token: z.text(),
7
7
  });
8
8
 
9
9
  export type AddPaymentMethod = Static<typeof addPaymentMethodSchema>;
@@ -9,7 +9,10 @@ import {
9
9
  } from "../entities/paymentIntents.ts";
10
10
  import { type RefundEntity, refunds } from "../entities/refunds.ts";
11
11
  import { PaymentError } from "../errors/PaymentError.ts";
12
- import { PaymentProvider } from "../providers/PaymentProvider.ts";
12
+ import {
13
+ PaymentProvider,
14
+ type WebhookEvent,
15
+ } from "../providers/PaymentProvider.ts";
13
16
 
14
17
  export class PaymentService {
15
18
  protected readonly alepha = $inject(Alepha);
@@ -79,7 +82,17 @@ export class PaymentService {
79
82
  returnUrl: string,
80
83
  authorize?: boolean,
81
84
  userId?: string,
82
- options?: { stripeAccount?: string; applicationFeeAmount?: number },
85
+ options?: {
86
+ stripeAccount?: string;
87
+ applicationFeeAmount?: number;
88
+ /**
89
+ * Pre-fills the payer's email on the PSP checkout page. Useful when
90
+ * the session runs on a sub-account (Stripe connected account) where
91
+ * no customer object exists — without it the hosted checkout makes
92
+ * the payer retype an address the platform already knows.
93
+ */
94
+ customerEmail?: string;
95
+ },
83
96
  ): Promise<{ url: string; intentId: string }> {
84
97
  const intent = await this.getIntent(intentId);
85
98
  this.assertStatus(intent, "created", "createSession");
@@ -99,6 +112,7 @@ export class PaymentService {
99
112
  authorize,
100
113
  stripeAccount: options?.stripeAccount,
101
114
  applicationFeeAmount: options?.applicationFeeAmount,
115
+ customerEmail: options?.customerEmail,
102
116
  });
103
117
 
104
118
  await this.intentRepo.updateById(intent.id, {
@@ -114,17 +128,51 @@ export class PaymentService {
114
128
  */
115
129
  public async handleWebhook(request: Request): Promise<void> {
116
130
  const event = await this.provider.parseWebhook(request);
117
- const intents = await this.intentRepo.findMany({
131
+ await this.handleParsedWebhook(event);
132
+ }
133
+
134
+ /**
135
+ * Resolve an already-parsed webhook event to its stored intent and apply
136
+ * it. Split from `handleWebhook` so callers that parse with a DIFFERENT
137
+ * verification path (e.g. a connected-accounts endpoint that must first
138
+ * route the event to a tenant) can reuse the matching + transition logic.
139
+ */
140
+ public async handleParsedWebhook(event: WebhookEvent): Promise<void> {
141
+ let intents = await this.intentRepo.findMany({
118
142
  where: { providerRef: { eq: event.providerRef } },
119
143
  limit: 1,
120
144
  });
121
145
 
146
+ // Session events reference two PSP objects (session + PaymentIntent);
147
+ // the stored ref is whichever existed at creation time — try the other.
148
+ if (intents.length === 0 && event.providerRefAlt) {
149
+ intents = await this.intentRepo.findMany({
150
+ where: { providerRef: { eq: event.providerRefAlt } },
151
+ limit: 1,
152
+ });
153
+ }
154
+
122
155
  if (intents.length === 0) {
123
156
  this.log.warn(`Webhook for unknown providerRef: ${event.providerRef}`);
124
157
  return;
125
158
  }
126
159
 
127
160
  const intent = intents[0];
161
+
162
+ // Session events put the session id in `providerRef` and the (lazily
163
+ // created) PaymentIntent in `providerRefAlt`. When the stored ref is
164
+ // still the session id, upgrade it to the PI as soon as an event
165
+ // reveals it — refunds can only target the PI, never the session.
166
+ if (
167
+ event.providerRefAlt &&
168
+ intent.providerRef === event.providerRef &&
169
+ event.providerRefAlt !== event.providerRef
170
+ ) {
171
+ await this.intentRepo.updateById(intent.id, {
172
+ providerRef: event.providerRefAlt,
173
+ });
174
+ }
175
+
128
176
  await this.handleWebhookEvent(intent.id, event.status, event.raw);
129
177
  }
130
178
 
@@ -257,6 +305,14 @@ export class PaymentService {
257
305
  intentId: string,
258
306
  amount: number,
259
307
  reason?: string,
308
+ options: {
309
+ /**
310
+ * PSP sub-account holding the charge (Stripe connected account) —
311
+ * required to refund payments that were created with the same option,
312
+ * e.g. direct charges on a club's connected account.
313
+ */
314
+ stripeAccount?: string;
315
+ } = {},
260
316
  ): Promise<RefundEntity> {
261
317
  const intent = await this.getIntent(intentId);
262
318
 
@@ -288,6 +344,7 @@ export class PaymentService {
288
344
  const result = await this.provider.refundPayment(
289
345
  intent.providerRef,
290
346
  amount,
347
+ options,
291
348
  );
292
349
  refundProviderRef = result.providerRef;
293
350
  }
@@ -4,6 +4,7 @@ import { AlephaOrmPostgres } from "alepha/orm/postgres";
4
4
  import { BadRequestError } from "alepha/server";
5
5
  import { describe, it } from "vitest";
6
6
  import { AlephaApiSubscriptions } from "../index.ts";
7
+ import { createSubscriptionSchema } from "../schemas/createSubscriptionSchema.ts";
7
8
  import type { PlanDefinition } from "../schemas/planDefinitionSchema.ts";
8
9
  import { SubscriptionConfig } from "../services/SubscriptionConfig.ts";
9
10
  import { SubscriptionService } from "../services/SubscriptionService.ts";
@@ -67,6 +68,19 @@ const setup = async () => {
67
68
  describe("SubscriptionService", () => {
68
69
  // ---------------------------------------------------------------------------------------------------------------
69
70
 
71
+ describe("public createSubscription body", () => {
72
+ it("does not accept a client-controlled skipTrial", ({ expect }) => {
73
+ // skipTrial goes straight to `status:active` with no payment; a client
74
+ // must never be able to set it via the public subscribe endpoint.
75
+ const parsed = createSubscriptionSchema.parse({
76
+ planId: "pro",
77
+ interval: "monthly",
78
+ skipTrial: true,
79
+ } as Record<string, unknown>);
80
+ expect((parsed as Record<string, unknown>).skipTrial).toBeUndefined();
81
+ });
82
+ });
83
+
70
84
  describe("subscribe", () => {
71
85
  it("should create a trialing subscription with trial days", async ({
72
86
  expect,
@@ -1,4 +1,4 @@
1
- import { $inject, t } from "alepha";
1
+ import { $inject, z } from "alepha";
2
2
  import { $secure } from "alepha/security";
3
3
  import { $action, okSchema } from "alepha/server";
4
4
  import { cancelSubscriptionSchema } from "../schemas/cancelSubscriptionSchema.ts";
@@ -26,7 +26,7 @@ export class AdminSubscriptionController {
26
26
  description: "Find subscriptions with pagination and filtering",
27
27
  schema: {
28
28
  query: subscriptionQuerySchema,
29
- response: t.page(subscriptionResourceSchema),
29
+ response: z.page(subscriptionResourceSchema),
30
30
  },
31
31
  handler: ({ query }) => this.service.findSubscriptions(query),
32
32
  });
@@ -40,7 +40,7 @@ export class AdminSubscriptionController {
40
40
  use: [$secure({ permissions: ["admin:subscription:read"] })],
41
41
  description: "Get a subscription by ID",
42
42
  schema: {
43
- params: t.object({ id: t.uuid() }),
43
+ params: z.object({ id: z.uuid() }),
44
44
  response: subscriptionResourceSchema,
45
45
  },
46
46
  handler: ({ params }) => this.service.getSubscription(params.id),
@@ -69,10 +69,10 @@ export class AdminSubscriptionController {
69
69
  use: [$secure({ permissions: ["admin:subscription:read"] })],
70
70
  description: "Get revenue data from recent subscription events",
71
71
  schema: {
72
- query: t.object({
73
- days: t.optional(t.integer({ minimum: 1, maximum: 365 })),
72
+ query: z.object({
73
+ days: z.integer().min(1).max(365).optional(),
74
74
  }),
75
- response: t.object({ total: t.integer(), count: t.integer() }),
75
+ response: z.object({ total: z.integer(), count: z.integer() }),
76
76
  },
77
77
  handler: ({ query }) => this.service.getRevenue(query.days),
78
78
  });
@@ -136,7 +136,7 @@ export class AdminSubscriptionController {
136
136
  use: [$secure({ permissions: ["admin:subscription:update"] })],
137
137
  description: "Force a plan change for a subscription",
138
138
  schema: {
139
- params: t.object({ id: t.uuid() }),
139
+ params: z.object({ id: z.uuid() }),
140
140
  body: changePlanSchema,
141
141
  response: subscriptionResourceSchema,
142
142
  },
@@ -158,7 +158,7 @@ export class AdminSubscriptionController {
158
158
  use: [$secure({ permissions: ["admin:subscription:update"] })],
159
159
  description: "Force cancel a subscription",
160
160
  schema: {
161
- params: t.object({ id: t.uuid() }),
161
+ params: z.object({ id: z.uuid() }),
162
162
  body: cancelSubscriptionSchema,
163
163
  response: okSchema,
164
164
  },
@@ -181,7 +181,7 @@ export class AdminSubscriptionController {
181
181
  use: [$secure({ permissions: ["admin:subscription:update"] })],
182
182
  description: "Reactivate a suspended subscription",
183
183
  schema: {
184
- params: t.object({ id: t.uuid() }),
184
+ params: z.object({ id: z.uuid() }),
185
185
  response: okSchema,
186
186
  },
187
187
  handler: async ({ params }) => {
@@ -200,8 +200,8 @@ export class AdminSubscriptionController {
200
200
  use: [$secure({ permissions: ["admin:subscription:update"] })],
201
201
  description: "Extend the trial period for a subscription",
202
202
  schema: {
203
- params: t.object({ id: t.uuid() }),
204
- body: t.object({ days: t.integer({ minimum: 1, maximum: 365 }) }),
203
+ params: z.object({ id: z.uuid() }),
204
+ body: z.object({ days: z.integer().min(1).max(365) }),
205
205
  response: okSchema,
206
206
  },
207
207
  handler: async ({ params, body }) => {