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,36 +1,18 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
 
4
- export const registerSchema = t.object({
5
- username: t.string({
6
- minLength: 3,
7
- maxLength: 20,
8
- pattern: /^[a-zA-Z0-9_]+$/,
9
- description: "Username for the new account",
10
- }),
11
- email: t.email({
12
- description: "Email address for the new account",
13
- }),
14
- password: t.string({
15
- minLength: 8,
16
- description: "Password for the new account",
17
- }),
18
- confirmPassword: t.string({
19
- minLength: 8,
20
- description: "Confirmation of the password",
21
- }),
22
- firstName: t.optional(
23
- t.string({
24
- maxLength: 100,
25
- description: "User's first name",
26
- }),
27
- ),
28
- lastName: t.optional(
29
- t.string({
30
- maxLength: 100,
31
- description: "User's last name",
32
- }),
33
- ),
4
+ export const registerSchema = z.object({
5
+ username: z
6
+ .string()
7
+ .min(3)
8
+ .max(20)
9
+ .regex(/^[a-zA-Z0-9_]+$/)
10
+ .describe("Username for the new account"),
11
+ email: z.email().describe("Email address for the new account"),
12
+ password: z.string().min(8).describe("Password for the new account"),
13
+ confirmPassword: z.string().min(8).describe("Confirmation of the password"),
14
+ firstName: z.string().max(100).describe("User's first name").optional(),
15
+ lastName: z.string().max(100).describe("User's last name").optional(),
34
16
  });
35
17
 
36
18
  export type RegisterInput = Static<typeof registerSchema>;
@@ -1,27 +1,23 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
 
3
- export const registrationIntentResponseSchema = t.object({
4
- intentId: t.uuid({
5
- description: "Unique identifier for the registration intent",
6
- }),
7
- expectCaptcha: t.boolean({
8
- description: "Whether captcha verification is required",
9
- }),
10
- captchaSiteKey: t.optional(
11
- t.string({
12
- description:
13
- "Public site key the client should render (when expectCaptcha is true)",
14
- }),
15
- ),
16
- expectEmailVerification: t.boolean({
17
- description: "Whether email verification is required",
18
- }),
19
- expectPhoneVerification: t.boolean({
20
- description: "Whether phone verification is required",
21
- }),
22
- expiresAt: t.datetime({
23
- description: "When the registration intent expires",
24
- }),
3
+ export const registrationIntentResponseSchema = z.object({
4
+ intentId: z.uuid().describe("Unique identifier for the registration intent"),
5
+ expectCaptcha: z
6
+ .boolean()
7
+ .describe("Whether captcha verification is required"),
8
+ captchaSiteKey: z
9
+ .string()
10
+ .describe(
11
+ "Public site key the client should render (when expectCaptcha is true)",
12
+ )
13
+ .optional(),
14
+ expectEmailVerification: z
15
+ .boolean()
16
+ .describe("Whether email verification is required"),
17
+ expectPhoneVerification: z
18
+ .boolean()
19
+ .describe("Whether phone verification is required"),
20
+ expiresAt: z.datetime().describe("When the registration intent expires"),
25
21
  });
26
22
 
27
23
  export type RegistrationIntentResponse = Static<
@@ -1,24 +1,17 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
 
4
- export const resetPasswordRequestSchema = t.object({
5
- email: t.email({
6
- description: "Email address to send password reset link",
7
- }),
4
+ export const resetPasswordRequestSchema = z.object({
5
+ email: z.email().describe("Email address to send password reset link"),
8
6
  });
9
7
 
10
- export const resetPasswordSchema = t.object({
11
- token: t.string({
12
- description: "Password reset token from email",
13
- }),
14
- password: t.string({
15
- minLength: 8,
16
- description: "New password",
17
- }),
18
- confirmPassword: t.string({
19
- minLength: 8,
20
- description: "Confirmation of the new password",
21
- }),
8
+ export const resetPasswordSchema = z.object({
9
+ token: z.string().describe("Password reset token from email"),
10
+ password: z.string().min(8).describe("New password"),
11
+ confirmPassword: z
12
+ .string()
13
+ .min(8)
14
+ .describe("Confirmation of the new password"),
22
15
  });
23
16
 
24
17
  export type ResetPasswordRequest = Static<typeof resetPasswordRequestSchema>;
@@ -1,9 +1,9 @@
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
 
5
- export const sessionQuerySchema = t.extend(pageQuerySchema, {
6
- userId: t.optional(t.uuid()),
5
+ export const sessionQuerySchema = pageQuerySchema.extend({
6
+ userId: z.uuid().optional(),
7
7
  });
8
8
 
9
9
  export type SessionQuery = Static<typeof sessionQuerySchema>;
@@ -1,5 +1,5 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
 
4
4
  /**
5
5
  * Slim view of the session's owner — embedded by the admin listing so the
@@ -7,32 +7,32 @@ import { t } from "alepha";
7
7
  * back via a left join, so it's optional (a session whose user was deleted
8
8
  * still returns; `user` is undefined).
9
9
  */
10
- export const sessionUserSummarySchema = t.object({
11
- id: t.uuid(),
12
- email: t.optional(t.string({ format: "email" })),
13
- username: t.optional(t.shortText({ minLength: 3, maxLength: 30 })),
14
- firstName: t.optional(t.string()),
15
- lastName: t.optional(t.string()),
10
+ export const sessionUserSummarySchema = z.object({
11
+ id: z.uuid(),
12
+ email: z.string().meta({ format: "email" }).optional(),
13
+ username: z.shortText({ minLength: 3, maxLength: 30 }).optional(),
14
+ firstName: z.string().optional(),
15
+ lastName: z.string().optional(),
16
16
  });
17
17
 
18
- export const sessionResourceSchema = t.object({
19
- id: t.uuid(),
20
- version: t.number(),
21
- createdAt: t.datetime(),
22
- updatedAt: t.datetime(),
23
- refreshToken: t.uuid(),
24
- userId: t.uuid(),
25
- expiresAt: t.datetime(),
26
- ip: t.optional(t.string()),
27
- country: t.optional(t.string()),
28
- userAgent: t.optional(
29
- t.object({
30
- os: t.string(),
31
- browser: t.string(),
32
- device: t.enum(["MOBILE", "DESKTOP", "TABLET"]),
33
- }),
34
- ),
35
- user: t.optional(sessionUserSummarySchema),
18
+ export const sessionResourceSchema = z.object({
19
+ id: z.uuid(),
20
+ version: z.number(),
21
+ createdAt: z.datetime(),
22
+ updatedAt: z.datetime(),
23
+ refreshToken: z.uuid(),
24
+ userId: z.uuid(),
25
+ expiresAt: z.datetime(),
26
+ ip: z.string().optional(),
27
+ country: z.string().optional(),
28
+ userAgent: z
29
+ .object({
30
+ os: z.string(),
31
+ browser: z.string(),
32
+ device: z.enum(["MOBILE", "DESKTOP", "TABLET"]),
33
+ })
34
+ .optional(),
35
+ user: sessionUserSummarySchema.optional(),
36
36
  });
37
37
 
38
38
  export type SessionResource = Static<typeof sessionResourceSchema>;
@@ -1,9 +1,8 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
3
2
  import { users } from "../entities/users.ts";
4
3
 
5
- export const updateUserSchema = t.partial(
6
- t.omit(users.insertSchema, ["id", "version", "createdAt", "updatedAt"]),
7
- );
4
+ export const updateUserSchema = users.insertSchema
5
+ .omit({ id: true, version: true, createdAt: true, updatedAt: true })
6
+ .partial();
8
7
 
9
8
  export type UpdateUser = Static<typeof updateUserSchema>;
@@ -1,19 +1,19 @@
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
 
5
- export const userQuerySchema = t.extend(pageQuerySchema, {
5
+ export const userQuerySchema = pageQuerySchema.extend({
6
6
  /**
7
7
  * Free-text search applied (case-insensitive) across `email`,
8
8
  * `username`, `firstName`, and `lastName`. Matches with a leading and
9
9
  * trailing wildcard, so `?search=foo` finds any user whose email,
10
10
  * username, or name contains `foo`.
11
11
  */
12
- search: t.optional(t.string()),
13
- email: t.optional(t.string()),
14
- enabled: t.optional(t.boolean()),
15
- emailVerified: t.optional(t.boolean()),
16
- roles: t.optional(t.array(t.string())),
12
+ search: z.string().optional(),
13
+ email: z.string().optional(),
14
+ enabled: z.boolean().optional(),
15
+ emailVerified: z.boolean().optional(),
16
+ roles: z.array(z.string()).optional(),
17
17
  });
18
18
 
19
19
  export type UserQuery = Static<typeof userQuerySchema>;
@@ -1,5 +1,8 @@
1
1
  import { $inject, Alepha, AlephaError } from "alepha";
2
- import type { VerificationController } from "alepha/api/verifications";
2
+ import {
3
+ type VerificationController,
4
+ VerificationService,
5
+ } from "alepha/api/verifications";
3
6
  import { $cache } from "alepha/cache";
4
7
  import { DatabaseCacheProvider } from "alepha/cache/database";
5
8
  import { CaptchaProvider } from "alepha/captcha";
@@ -47,7 +50,10 @@ export class RegistrationService {
47
50
  protected readonly log = $logger();
48
51
  protected readonly dateTimeProvider = $inject(DateTimeProvider);
49
52
  protected readonly cryptoProvider = $inject(CryptoProvider);
53
+ // Validation goes through the public controller; code *creation* uses the
54
+ // service directly so the raw token is never exposed over HTTP.
50
55
  protected readonly verificationController = $client<VerificationController>();
56
+ protected readonly verificationService = $inject(VerificationService);
51
57
  protected readonly realmProvider = $inject(RealmProvider);
52
58
  protected readonly credentialService = $inject(CredentialService);
53
59
  protected readonly captchaProvider = $inject(CaptchaProvider);
@@ -193,6 +199,16 @@ export class RegistrationService {
193
199
  throw new BadRequestError("Phone number is required");
194
200
  }
195
201
 
202
+ if (
203
+ realmSettings?.firstNameLastName === "required" &&
204
+ (!body.firstName?.trim() || !body.lastName?.trim())
205
+ ) {
206
+ this.log.debug("Registration rejected: first/last name required", {
207
+ userRealmName,
208
+ });
209
+ throw new BadRequestError("First name and last name are required");
210
+ }
211
+
196
212
  // In "email" mode, derive the username from the email *now* so that
197
213
  // checkUserAvailability picks it up too, the DB unique index sees a
198
214
  // concrete value, and the persisted intent already carries the final
@@ -474,11 +490,10 @@ export class RegistrationService {
474
490
  ): Promise<void> {
475
491
  this.log.debug("Sending email verification code", { email });
476
492
 
477
- const verification =
478
- await this.verificationController.requestVerificationCode({
479
- params: { type: "code" },
480
- body: { target: email },
481
- });
493
+ const verification = await this.verificationService.createVerification({
494
+ type: "code",
495
+ target: email,
496
+ });
482
497
 
483
498
  await this.userNotifications(realmName).emailVerification.push({
484
499
  contact: email,
@@ -501,11 +516,10 @@ export class RegistrationService {
501
516
  ): Promise<void> {
502
517
  this.log.debug("Sending phone verification code", { phoneNumber });
503
518
  try {
504
- const verification =
505
- await this.verificationController.requestVerificationCode({
506
- params: { type: "code" },
507
- body: { target: phoneNumber },
508
- });
519
+ const verification = await this.verificationService.createVerification({
520
+ type: "code",
521
+ target: phoneNumber,
522
+ });
509
523
 
510
524
  await this.userNotifications(realmName).phoneVerification.push({
511
525
  contact: phoneNumber,
@@ -1,5 +1,8 @@
1
1
  import { $inject, Alepha } from "alepha";
2
- import type { VerificationController } from "alepha/api/verifications";
2
+ import {
3
+ type VerificationController,
4
+ VerificationService,
5
+ } from "alepha/api/verifications";
3
6
  import { $logger } from "alepha/logger";
4
7
  import type { Page } from "alepha/orm";
5
8
  import { CryptoProvider } from "alepha/security";
@@ -16,7 +19,11 @@ import type { UserQuery } from "../schemas/userQuerySchema.ts";
16
19
  export class UserService {
17
20
  protected readonly alepha = $inject(Alepha);
18
21
  protected readonly log = $logger();
22
+ // Validation (`validateVerificationCode`) goes through the public controller;
23
+ // code *creation* uses the service directly so the raw token is never exposed
24
+ // over HTTP (the controller no longer has a token-returning request action).
19
25
  protected readonly verificationController = $client<VerificationController>();
26
+ protected readonly verificationService = $inject(VerificationService);
20
27
  protected readonly realmProvider = $inject(RealmProvider);
21
28
  protected readonly cryptoProvider = $inject(CryptoProvider);
22
29
 
@@ -78,11 +85,10 @@ export class UserService {
78
85
  }
79
86
 
80
87
  try {
81
- const verification =
82
- await this.verificationController.requestVerificationCode({
83
- params: { type: method },
84
- body: { target: email },
85
- });
88
+ const verification = await this.verificationService.createVerification({
89
+ type: method,
90
+ target: email,
91
+ });
86
92
 
87
93
  if (method === "link") {
88
94
  // Build verification URL from realm settings (server-controlled, not user input)
@@ -6,6 +6,7 @@ import {
6
6
  AlephaApiVerification,
7
7
  VerificationController,
8
8
  VerificationParameters,
9
+ VerificationService,
9
10
  } from "../index.ts";
10
11
 
11
12
  const createTest = async () => {
@@ -14,6 +15,7 @@ const createTest = async () => {
14
15
  .with(AlephaApiVerification);
15
16
  const parameters = alepha.inject(VerificationParameters).get("code");
16
17
  const controller = alepha.inject(VerificationController);
18
+ const service = alepha.inject(VerificationService);
17
19
  const dateTimeProvider = alepha.inject(DateTimeProvider);
18
20
  const target = "+33633115544";
19
21
 
@@ -21,6 +23,7 @@ const createTest = async () => {
21
23
 
22
24
  return {
23
25
  alepha,
26
+ service,
24
27
  parameters,
25
28
  controller,
26
29
  dateTimeProvider,
@@ -30,16 +33,9 @@ const createTest = async () => {
30
33
 
31
34
  describe("Code Verification", () => {
32
35
  it("should verify phone with 6-digit code correctly", async ({ expect }) => {
33
- const { parameters, controller, target } = await createTest();
36
+ const { parameters, controller, target, service } = await createTest();
34
37
 
35
- const request = await controller.requestVerificationCode({
36
- params: {
37
- type: "code",
38
- },
39
- body: {
40
- target,
41
- },
42
- });
38
+ const request = await service.createVerification({ type: "code", target });
43
39
 
44
40
  expect(request.codeExpiration).toEqual(parameters.codeExpiration);
45
41
  expect(request.verificationCooldown).toEqual(
@@ -84,17 +80,44 @@ describe("Code Verification", () => {
84
80
  });
85
81
  });
86
82
 
83
+ it("rejects a wrong code even after the target is already verified", async ({
84
+ expect,
85
+ }) => {
86
+ const { controller, target, service } = await createTest();
87
+
88
+ const request = await service.createVerification({ type: "code", target });
89
+
90
+ // First, verify legitimately with the real code.
91
+ expect(
92
+ await controller.validateVerificationCode({
93
+ params: { type: "code" },
94
+ body: { target, token: request.token },
95
+ }),
96
+ ).toEqual({ ok: true });
97
+
98
+ // A bogus code submitted afterwards must NOT be accepted just because
99
+ // the target was already verified — otherwise any flow re-using
100
+ // verifyCode as an authz gate accepts an attacker's guess.
101
+ await expect(() =>
102
+ controller.validateVerificationCode({
103
+ params: { type: "code" },
104
+ body: { target, token: "000000" },
105
+ }),
106
+ ).rejects.toThrowError("Invalid verification code");
107
+
108
+ // The real code still short-circuits as already-verified.
109
+ expect(
110
+ await controller.validateVerificationCode({
111
+ params: { type: "code" },
112
+ body: { target, token: request.token },
113
+ }),
114
+ ).toEqual({ ok: true, alreadyVerified: true });
115
+ });
116
+
87
117
  it("should handle invalid code", async ({ expect }) => {
88
- const { controller, target } = await createTest();
118
+ const { controller, target, service } = await createTest();
89
119
 
90
- await controller.requestVerificationCode({
91
- params: {
92
- type: "code",
93
- },
94
- body: {
95
- target,
96
- },
97
- });
120
+ await service.createVerification({ type: "code", target });
98
121
 
99
122
  await expect(() =>
100
123
  controller.validateVerificationCode({
@@ -110,16 +133,9 @@ describe("Code Verification", () => {
110
133
  });
111
134
 
112
135
  it("should handle max attempts", async ({ expect }) => {
113
- const { parameters, controller, target } = await createTest();
136
+ const { parameters, controller, target, service } = await createTest();
114
137
 
115
- await controller.requestVerificationCode({
116
- params: {
117
- type: "code",
118
- },
119
- body: {
120
- target,
121
- },
122
- });
138
+ await service.createVerification({ type: "code", target });
123
139
 
124
140
  for (let i = 0; i < parameters.maxAttempts; i++) {
125
141
  await controller
@@ -149,27 +165,13 @@ describe("Code Verification", () => {
149
165
  });
150
166
 
151
167
  it("should handle cooldown", async ({ expect }) => {
152
- const { dateTimeProvider, parameters, controller, target } =
168
+ const { dateTimeProvider, parameters, target, service } =
153
169
  await createTest();
154
170
 
155
- await controller.requestVerificationCode({
156
- params: {
157
- type: "code",
158
- },
159
- body: {
160
- target,
161
- },
162
- });
171
+ await service.createVerification({ type: "code", target });
163
172
 
164
173
  await expect(() =>
165
- controller.requestVerificationCode({
166
- params: {
167
- type: "code",
168
- },
169
- body: {
170
- target,
171
- },
172
- }),
174
+ service.createVerification({ type: "code", target }),
173
175
  ).rejects.toThrowError("Verification is on cooldown for ");
174
176
 
175
177
  await dateTimeProvider.travel(
@@ -177,14 +179,7 @@ describe("Code Verification", () => {
177
179
  "seconds",
178
180
  );
179
181
 
180
- const response = await controller.requestVerificationCode({
181
- params: {
182
- type: "code",
183
- },
184
- body: {
185
- target,
186
- },
187
- });
182
+ const response = await service.createVerification({ type: "code", target });
188
183
 
189
184
  expect(response.codeExpiration).toEqual(parameters.codeExpiration);
190
185
  expect(response.verificationCooldown).toEqual(
@@ -195,7 +190,7 @@ describe("Code Verification", () => {
195
190
  });
196
191
 
197
192
  it("should respect rate limit per day", async ({ expect }) => {
198
- const { parameters, controller, dateTimeProvider, target } =
193
+ const { parameters, dateTimeProvider, target, service } =
199
194
  await createTest();
200
195
 
201
196
  // Anchor test time at noon to keep all `limitPerDay` inserts inside the
@@ -213,14 +208,7 @@ describe("Code Verification", () => {
213
208
  }
214
209
 
215
210
  for (let i = 0; i < parameters.limitPerDay; i++) {
216
- await controller.requestVerificationCode({
217
- params: {
218
- type: "code",
219
- },
220
- body: {
221
- target,
222
- },
223
- });
211
+ await service.createVerification({ type: "code", target });
224
212
  await dateTimeProvider.travel(
225
213
  parameters.verificationCooldown + 1,
226
214
  "seconds",
@@ -228,31 +216,17 @@ describe("Code Verification", () => {
228
216
  }
229
217
 
230
218
  await expect(() =>
231
- controller.requestVerificationCode({
232
- params: {
233
- type: "code",
234
- },
235
- body: {
236
- target,
237
- },
238
- }),
219
+ service.createVerification({ type: "code", target }),
239
220
  ).rejects.toThrowError(
240
221
  `Maximum number of verification requests per day reached (${parameters.limitPerDay})`,
241
222
  );
242
223
  });
243
224
 
244
225
  it("should handle code expiration", async ({ expect }) => {
245
- const { parameters, controller, dateTimeProvider, target } =
226
+ const { parameters, controller, dateTimeProvider, target, service } =
246
227
  await createTest();
247
228
 
248
- const response = await controller.requestVerificationCode({
249
- params: {
250
- type: "code",
251
- },
252
- body: {
253
- target,
254
- },
255
- });
229
+ const response = await service.createVerification({ type: "code", target });
256
230
 
257
231
  const code = response.token;
258
232
 
@@ -273,16 +247,12 @@ describe("Code Verification", () => {
273
247
  });
274
248
 
275
249
  it("should generate different codes for each request", async ({ expect }) => {
276
- const { controller, dateTimeProvider, parameters, target } =
250
+ const { dateTimeProvider, parameters, target, service } =
277
251
  await createTest();
278
252
 
279
- const response1 = await controller.requestVerificationCode({
280
- params: {
281
- type: "code",
282
- },
283
- body: {
284
- target,
285
- },
253
+ const response1 = await service.createVerification({
254
+ type: "code",
255
+ target,
286
256
  });
287
257
 
288
258
  const code1 = response1.token;
@@ -292,13 +262,9 @@ describe("Code Verification", () => {
292
262
  "seconds",
293
263
  );
294
264
 
295
- const response2 = await controller.requestVerificationCode({
296
- params: {
297
- type: "code",
298
- },
299
- body: {
300
- target,
301
- },
265
+ const response2 = await service.createVerification({
266
+ type: "code",
267
+ target,
302
268
  });
303
269
 
304
270
  const code2 = response2.token;
@@ -310,18 +276,14 @@ describe("Code Verification", () => {
310
276
  });
311
277
 
312
278
  it("should pad codes with leading zeros", async ({ expect }) => {
313
- const { controller, target } = await createTest();
279
+ const { target, service } = await createTest();
314
280
 
315
281
  // Request multiple codes to increase chance of getting one with leading zeros
316
282
  const codes: string[] = [];
317
283
  for (let i = 0; i < 5; i++) {
318
- const response = await controller.requestVerificationCode({
319
- params: {
320
- type: "code",
321
- },
322
- body: {
323
- target: `${target}${i}`,
324
- },
284
+ const response = await service.createVerification({
285
+ type: "code",
286
+ target: `${target}${i}`,
325
287
  });
326
288
  codes.push(response.token);
327
289
  }