alepha 0.19.0 → 0.19.2

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 (638) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +6 -9
  3. package/dist/api/audits/index.d.ts +378 -346
  4. package/dist/api/audits/index.d.ts.map +1 -1
  5. package/dist/api/files/index.d.ts +216 -184
  6. package/dist/api/files/index.d.ts.map +1 -1
  7. package/dist/api/files/index.js +5 -1
  8. package/dist/api/files/index.js.map +1 -1
  9. package/dist/api/jobs/index.d.ts +528 -496
  10. package/dist/api/jobs/index.d.ts.map +1 -1
  11. package/dist/api/jobs/index.js +3 -3
  12. package/dist/api/jobs/index.js.map +1 -1
  13. package/dist/api/keys/index.d.ts +202 -202
  14. package/dist/api/keys/index.d.ts.map +1 -1
  15. package/dist/api/notifications/index.d.ts +152 -152
  16. package/dist/api/notifications/index.d.ts.map +1 -1
  17. package/dist/api/organizations/index.browser.js +48 -0
  18. package/dist/api/organizations/index.browser.js.map +1 -0
  19. package/dist/api/organizations/index.d.ts +516 -0
  20. package/dist/api/organizations/index.d.ts.map +1 -0
  21. package/dist/api/organizations/index.js +202 -0
  22. package/dist/api/organizations/index.js.map +1 -0
  23. package/dist/api/parameters/index.d.ts +391 -358
  24. package/dist/api/parameters/index.d.ts.map +1 -1
  25. package/dist/api/parameters/index.js +5 -1
  26. package/dist/api/parameters/index.js.map +1 -1
  27. package/dist/api/users/index.browser.js +7 -5
  28. package/dist/api/users/index.browser.js.map +1 -1
  29. package/dist/api/users/index.d.ts +989 -931
  30. package/dist/api/users/index.d.ts.map +1 -1
  31. package/dist/api/users/index.js +292 -146
  32. package/dist/api/users/index.js.map +1 -1
  33. package/dist/api/verifications/index.d.ts +132 -132
  34. package/dist/api/verifications/index.d.ts.map +1 -1
  35. package/dist/api/verifications/index.js +2 -2
  36. package/dist/api/verifications/index.js.map +1 -1
  37. package/dist/batch/index.d.ts +6 -6
  38. package/dist/batch/index.d.ts.map +1 -1
  39. package/dist/billing/index.d.ts +1048 -0
  40. package/dist/billing/index.d.ts.map +1 -0
  41. package/dist/billing/index.js +713 -0
  42. package/dist/billing/index.js.map +1 -0
  43. package/dist/bin/index.js +0 -2
  44. package/dist/bin/index.js.map +1 -1
  45. package/dist/bucket/index.d.ts +10 -10
  46. package/dist/bucket/index.d.ts.map +1 -1
  47. package/dist/bucket/index.js +2 -2
  48. package/dist/bucket/index.js.map +1 -1
  49. package/dist/cache/core/index.d.ts +9 -9
  50. package/dist/cache/core/index.d.ts.map +1 -1
  51. package/dist/cache/core/index.js +2 -2
  52. package/dist/cache/core/index.js.map +1 -1
  53. package/dist/cache/core/index.workerd.js +2 -2
  54. package/dist/cache/core/index.workerd.js.map +1 -1
  55. package/dist/cache/redis/index.d.ts +6 -6
  56. package/dist/cache/redis/index.d.ts.map +1 -1
  57. package/dist/cache/redis/index.js +2 -2
  58. package/dist/cache/redis/index.js.map +1 -1
  59. package/dist/cli/config/index.d.ts +12 -2
  60. package/dist/cli/config/index.d.ts.map +1 -1
  61. package/dist/cli/config/index.js +4 -0
  62. package/dist/cli/config/index.js.map +1 -1
  63. package/dist/cli/core/index.d.ts +183 -139
  64. package/dist/cli/core/index.d.ts.map +1 -1
  65. package/dist/cli/core/index.js +283 -86
  66. package/dist/cli/core/index.js.map +1 -1
  67. package/dist/cli/devtools/index.d.ts +45 -0
  68. package/dist/cli/devtools/index.d.ts.map +1 -0
  69. package/dist/cli/devtools/index.js +170 -0
  70. package/dist/cli/devtools/index.js.map +1 -0
  71. package/dist/cli/platform/index.d.ts +383 -492
  72. package/dist/cli/platform/index.d.ts.map +1 -1
  73. package/dist/cli/platform/index.js +42 -511
  74. package/dist/cli/platform/index.js.map +1 -1
  75. package/dist/cli/vendor/index.d.ts +196 -0
  76. package/dist/cli/vendor/index.d.ts.map +1 -0
  77. package/dist/cli/vendor/index.js +384 -0
  78. package/dist/cli/vendor/index.js.map +1 -0
  79. package/dist/command/index.d.ts +18 -18
  80. package/dist/command/index.d.ts.map +1 -1
  81. package/dist/command/index.js +2 -2
  82. package/dist/command/index.js.map +1 -1
  83. package/dist/core/index.browser.js +4 -4
  84. package/dist/core/index.browser.js.map +1 -1
  85. package/dist/core/index.d.ts +10 -10
  86. package/dist/core/index.d.ts.map +1 -1
  87. package/dist/core/index.js +4 -4
  88. package/dist/core/index.js.map +1 -1
  89. package/dist/core/index.native.js +4 -4
  90. package/dist/core/index.native.js.map +1 -1
  91. package/dist/core/index.workerd.js +4 -4
  92. package/dist/core/index.workerd.js.map +1 -1
  93. package/dist/crypto/index.d.ts +7 -7
  94. package/dist/crypto/index.d.ts.map +1 -1
  95. package/dist/datetime/index.d.ts +4 -4
  96. package/dist/datetime/index.d.ts.map +1 -1
  97. package/dist/email/brevo/index.d.ts +4 -4
  98. package/dist/email/brevo/index.d.ts.map +1 -1
  99. package/dist/email/core/index.d.ts +15 -11
  100. package/dist/email/core/index.d.ts.map +1 -1
  101. package/dist/email/core/index.js +12 -35
  102. package/dist/email/core/index.js.map +1 -1
  103. package/dist/email/smtp/index.d.ts +12 -12
  104. package/dist/email/smtp/index.d.ts.map +1 -1
  105. package/dist/email/smtp/index.js +7 -4
  106. package/dist/email/smtp/index.js.map +1 -1
  107. package/dist/fake/index.d.ts +4 -8
  108. package/dist/fake/index.d.ts.map +1 -1
  109. package/dist/fake/index.js +55 -889
  110. package/dist/fake/index.js.map +1 -1
  111. package/dist/lock/core/index.d.ts +13 -13
  112. package/dist/lock/core/index.d.ts.map +1 -1
  113. package/dist/lock/core/index.js +2 -2
  114. package/dist/lock/core/index.js.map +1 -1
  115. package/dist/lock/redis/index.d.ts +4 -4
  116. package/dist/lock/redis/index.d.ts.map +1 -1
  117. package/dist/logger/index.d.ts +16 -15
  118. package/dist/logger/index.d.ts.map +1 -1
  119. package/dist/logger/index.js +5 -2
  120. package/dist/logger/index.js.map +1 -1
  121. package/dist/mcp/index.d.ts +11 -11
  122. package/dist/mcp/index.d.ts.map +1 -1
  123. package/dist/mcp/index.js +2 -2
  124. package/dist/mcp/index.js.map +1 -1
  125. package/dist/orm/core/index.browser.js +11 -1
  126. package/dist/orm/core/index.browser.js.map +1 -1
  127. package/dist/orm/core/index.bun.js +53 -16
  128. package/dist/orm/core/index.bun.js.map +1 -1
  129. package/dist/orm/core/index.d.ts +95 -51
  130. package/dist/orm/core/index.d.ts.map +1 -1
  131. package/dist/orm/core/index.js +55 -14
  132. package/dist/orm/core/index.js.map +1 -1
  133. package/dist/orm/postgres/index.bun.js +17 -11
  134. package/dist/orm/postgres/index.bun.js.map +1 -1
  135. package/dist/orm/postgres/index.d.ts +21 -15
  136. package/dist/orm/postgres/index.d.ts.map +1 -1
  137. package/dist/orm/postgres/index.js +19 -13
  138. package/dist/orm/postgres/index.js.map +1 -1
  139. package/dist/queue/core/index.d.ts +14 -14
  140. package/dist/queue/core/index.d.ts.map +1 -1
  141. package/dist/queue/core/index.js +2 -2
  142. package/dist/queue/core/index.js.map +1 -1
  143. package/dist/queue/core/index.workerd.js +2 -2
  144. package/dist/queue/core/index.workerd.js.map +1 -1
  145. package/dist/queue/redis/index.d.ts +4 -4
  146. package/dist/queue/redis/index.d.ts.map +1 -1
  147. package/dist/queue/redis/index.js +2 -2
  148. package/dist/queue/redis/index.js.map +1 -1
  149. package/dist/react/auth/index.d.ts +9 -9
  150. package/dist/react/auth/index.d.ts.map +1 -1
  151. package/dist/react/core/index.d.ts +6 -6
  152. package/dist/react/core/index.d.ts.map +1 -1
  153. package/dist/react/core/index.js +5 -4
  154. package/dist/react/core/index.js.map +1 -1
  155. package/dist/react/form/index.d.ts +4 -4
  156. package/dist/react/form/index.d.ts.map +1 -1
  157. package/dist/react/head/index.d.ts +4 -4
  158. package/dist/react/head/index.d.ts.map +1 -1
  159. package/dist/react/i18n/index.d.ts +9 -9
  160. package/dist/react/i18n/index.d.ts.map +1 -1
  161. package/dist/react/intro/index.d.ts +2 -2
  162. package/dist/react/intro/index.d.ts.map +1 -1
  163. package/dist/react/intro/index.js +3 -4
  164. package/dist/react/intro/index.js.map +1 -1
  165. package/dist/react/router/index.browser.js +4 -5
  166. package/dist/react/router/index.browser.js.map +1 -1
  167. package/dist/react/router/index.d.ts +215 -215
  168. package/dist/react/router/index.d.ts.map +1 -1
  169. package/dist/react/router/index.js +6 -7
  170. package/dist/react/router/index.js.map +1 -1
  171. package/dist/react/testing/index.d.ts +2 -2
  172. package/dist/react/testing/index.d.ts.map +1 -1
  173. package/dist/react/testing/index.js +2 -4
  174. package/dist/react/testing/index.js.map +1 -1
  175. package/dist/redis/index.d.ts +19 -19
  176. package/dist/redis/index.d.ts.map +1 -1
  177. package/dist/retry/index.d.ts +4 -4
  178. package/dist/retry/index.d.ts.map +1 -1
  179. package/dist/scheduler/index.d.ts +13 -13
  180. package/dist/scheduler/index.d.ts.map +1 -1
  181. package/dist/scheduler/index.js +2 -2
  182. package/dist/scheduler/index.js.map +1 -1
  183. package/dist/scheduler/index.workerd.js +2 -2
  184. package/dist/scheduler/index.workerd.js.map +1 -1
  185. package/dist/security/index.browser.js +1 -1
  186. package/dist/security/index.browser.js.map +1 -1
  187. package/dist/security/index.d.ts +47 -47
  188. package/dist/security/index.d.ts.map +1 -1
  189. package/dist/security/index.js +9 -12
  190. package/dist/security/index.js.map +1 -1
  191. package/dist/server/auth/index.d.ts +170 -169
  192. package/dist/server/auth/index.d.ts.map +1 -1
  193. package/dist/server/auth/index.js +16 -2
  194. package/dist/server/auth/index.js.map +1 -1
  195. package/dist/server/cookies/index.d.ts +7 -7
  196. package/dist/server/cookies/index.d.ts.map +1 -1
  197. package/dist/server/core/index.d.ts +76 -76
  198. package/dist/server/core/index.d.ts.map +1 -1
  199. package/dist/server/core/index.js +23 -17
  200. package/dist/server/core/index.js.map +1 -1
  201. package/dist/server/cors/index.d.ts +13 -13
  202. package/dist/server/cors/index.d.ts.map +1 -1
  203. package/dist/server/cors/index.js +2 -2
  204. package/dist/server/cors/index.js.map +1 -1
  205. package/dist/server/etag/index.d.ts +9 -9
  206. package/dist/server/etag/index.d.ts.map +1 -1
  207. package/dist/server/health/index.d.ts +20 -20
  208. package/dist/server/health/index.d.ts.map +1 -1
  209. package/dist/server/links/index.browser.js +2 -2
  210. package/dist/server/links/index.browser.js.map +1 -1
  211. package/dist/server/links/index.d.ts +66 -66
  212. package/dist/server/links/index.d.ts.map +1 -1
  213. package/dist/server/links/index.js +4 -4
  214. package/dist/server/links/index.js.map +1 -1
  215. package/dist/server/metrics/index.d.ts +7 -7
  216. package/dist/server/metrics/index.d.ts.map +1 -1
  217. package/dist/server/proxy/index.d.ts +5 -5
  218. package/dist/server/proxy/index.d.ts.map +1 -1
  219. package/dist/server/rate-limit/index.d.ts +12 -12
  220. package/dist/server/rate-limit/index.d.ts.map +1 -1
  221. package/dist/server/rate-limit/index.js +2 -2
  222. package/dist/server/rate-limit/index.js.map +1 -1
  223. package/dist/server/static/index.d.ts +5 -5
  224. package/dist/server/static/index.d.ts.map +1 -1
  225. package/dist/server/swagger/index.d.ts +7 -7
  226. package/dist/server/swagger/index.d.ts.map +1 -1
  227. package/dist/server/swagger/index.js +2 -2
  228. package/dist/server/swagger/index.js.map +1 -1
  229. package/dist/sms/index.d.ts +11 -7
  230. package/dist/sms/index.d.ts.map +1 -1
  231. package/dist/sms/index.js +9 -15
  232. package/dist/sms/index.js.map +1 -1
  233. package/dist/system/index.d.ts +4 -4
  234. package/dist/system/index.d.ts.map +1 -1
  235. package/dist/topic/core/index.d.ts +6 -6
  236. package/dist/topic/core/index.d.ts.map +1 -1
  237. package/dist/topic/redis/index.d.ts +7 -7
  238. package/dist/topic/redis/index.d.ts.map +1 -1
  239. package/dist/topic/redis/index.js +2 -2
  240. package/dist/topic/redis/index.js.map +1 -1
  241. package/dist/websocket/index.d.ts +36 -36
  242. package/dist/websocket/index.d.ts.map +1 -1
  243. package/dist/websocket/index.js +2 -2
  244. package/dist/websocket/index.js.map +1 -1
  245. package/package.json +37 -32
  246. package/src/api/files/{controllers → __tests__}/FileController.spec.ts +189 -143
  247. package/src/api/files/{services → __tests__}/FileService.spec.ts +50 -30
  248. package/src/api/files/controllers/FileController.ts +6 -0
  249. package/src/api/jobs/{services → __tests__}/JobService.spec.ts +1 -1
  250. package/src/api/jobs/providers/JobProvider.ts +3 -3
  251. package/src/api/keys/{services → __tests__}/ApiKeyService.spec.ts +1 -1
  252. package/src/api/organizations/__tests__/OrganizationService.spec.ts +193 -0
  253. package/src/api/organizations/controllers/AdminOrganizationController.ts +103 -0
  254. package/src/api/organizations/entities/organizations.ts +20 -0
  255. package/src/api/organizations/index.browser.ts +10 -0
  256. package/src/api/organizations/index.ts +31 -0
  257. package/src/api/organizations/schemas/createOrganizationSchema.ts +10 -0
  258. package/src/api/organizations/schemas/organizationQuerySchema.ts +10 -0
  259. package/src/api/organizations/schemas/organizationResourceSchema.ts +6 -0
  260. package/src/api/organizations/schemas/updateOrganizationSchema.ts +7 -0
  261. package/src/api/organizations/services/OrganizationService.ts +75 -0
  262. package/src/api/parameters/services/ParameterProvider.ts +6 -1
  263. package/src/api/users/__tests__/$realm.spec.ts +191 -0
  264. package/src/api/users/__tests__/RealmProvider.spec.ts +53 -0
  265. package/src/api/users/__tests__/SessionService.spec.ts +778 -0
  266. package/src/api/users/{jobs → __tests__}/UserJobs.spec.ts +1 -1
  267. package/src/api/users/atoms/realmAuthSettingsAtom.ts +24 -0
  268. package/src/api/users/controllers/RealmController.ts +5 -11
  269. package/src/api/users/entities/users.ts +9 -3
  270. package/src/api/users/index.ts +23 -3
  271. package/src/api/users/primitives/$realm.ts +23 -11
  272. package/src/api/users/providers/RealmProvider.ts +23 -3
  273. package/src/api/users/services/RegistrationService.ts +3 -2
  274. package/src/api/users/services/SessionService.ts +249 -8
  275. package/src/api/users/services/UserService.ts +1 -1
  276. package/src/api/verifications/{jobs → __tests__}/VerificationJobs.spec.ts +4 -2
  277. package/src/api/verifications/parameters/VerificationParameters.ts +2 -2
  278. package/src/billing/__tests__/BillingService.spec.ts +136 -0
  279. package/src/billing/__tests__/PaymentMethodService.spec.ts +78 -0
  280. package/src/billing/controllers/AdminBillingController.ts +149 -0
  281. package/src/billing/controllers/BillingController.ts +108 -0
  282. package/src/billing/entities/paymentIntents.ts +34 -0
  283. package/src/billing/entities/paymentMethods.ts +24 -0
  284. package/src/billing/entities/refunds.ts +22 -0
  285. package/src/billing/errors/BillingError.ts +5 -0
  286. package/src/billing/index.ts +76 -0
  287. package/src/billing/providers/BillingProvider.ts +79 -0
  288. package/src/billing/providers/MemoryBillingProvider.ts +139 -0
  289. package/src/billing/schemas/intentSchemas.ts +60 -0
  290. package/src/billing/schemas/paymentMethodSchemas.ts +13 -0
  291. package/src/billing/schemas/refundSchemas.ts +6 -0
  292. package/src/billing/services/BillingService.ts +325 -0
  293. package/src/billing/services/PaymentMethodService.ts +82 -0
  294. package/src/bin/index.ts +0 -2
  295. package/src/bucket/providers/LocalFileStorageProvider.ts +2 -2
  296. package/src/cache/core/{primitives → __tests__}/$cache.middleware.spec.ts +1 -1
  297. package/src/cache/core/{providers → __tests__}/MemoryCacheProvider.spec.ts +1 -1
  298. package/src/cache/core/primitives/$cache.ts +2 -2
  299. package/src/cache/redis/providers/RedisCacheProvider.ts +2 -2
  300. package/src/cli/config/defineConfig.ts +20 -0
  301. package/src/cli/core/{services → __tests__}/ProjectScaffolder.spec.ts +1 -1
  302. package/src/cli/core/{commands/gen → __tests__}/changelog.spec.ts +1 -1
  303. package/src/cli/core/{commands → __tests__}/init.spec.ts +4 -12
  304. package/src/cli/core/assets.ts +0 -1
  305. package/src/cli/core/atoms/devOptions.ts +0 -5
  306. package/src/cli/core/commands/build.ts +2 -2
  307. package/src/cli/core/commands/dev.ts +165 -30
  308. package/src/cli/core/commands/gen/changelog.ts +2 -2
  309. package/src/cli/core/commands/init.ts +2 -7
  310. package/src/cli/core/commands/verify.ts +0 -1
  311. package/src/cli/core/providers/AppEntryProvider.ts +2 -2
  312. package/src/cli/core/providers/ViteDevServerProvider.ts +53 -46
  313. package/src/cli/core/services/PackageManagerUtils.ts +8 -3
  314. package/src/cli/core/services/ProjectScaffolder.ts +20 -20
  315. package/src/cli/core/tasks/BuildClientTask.ts +8 -0
  316. package/src/cli/core/tasks/BuildServerTask.ts +17 -4
  317. package/src/cli/core/templates/alephaConfigTs.ts +0 -6
  318. package/src/cli/core/templates/webAdminDashboardTsx.ts +17 -0
  319. package/src/cli/core/templates/webAppRouterTs.ts +85 -2
  320. package/src/cli/devtools/atoms/devtoolsOptions.ts +26 -0
  321. package/src/cli/devtools/index.ts +194 -0
  322. package/src/cli/platform/{adapters → __tests__}/CloudflareAdapter.spec.ts +2 -2
  323. package/src/cli/platform/{providers → __tests__}/GitHubSecretStore.spec.ts +1 -1
  324. package/src/cli/platform/{services → __tests__}/NamingService.spec.ts +1 -1
  325. package/src/cli/platform/{providers → __tests__}/PlatformCacheProvider.spec.ts +1 -1
  326. package/src/cli/platform/{services → __tests__}/PlatformInspector.spec.ts +1 -1
  327. package/src/cli/platform/{services → __tests__}/PlatformOrchestrator.spec.ts +3 -3
  328. package/src/cli/platform/{services → __tests__}/SecretFilterService.spec.ts +1 -1
  329. package/src/cli/platform/{commands → __tests__}/SecretsCommand.spec.ts +1 -1
  330. package/src/cli/platform/{adapters → __tests__}/VercelAdapter.spec.ts +2 -2
  331. package/src/cli/platform/atoms/platformOptions.ts +2 -10
  332. package/src/cli/platform/commands/SecretsCommand.ts +2 -2
  333. package/src/cli/platform/commands/platform.ts +2 -11
  334. package/src/cli/platform/index.ts +34 -11
  335. package/src/cli/platform/services/PlatformInspector.ts +2 -2
  336. package/src/cli/platform/services/PlatformOrchestrator.ts +0 -9
  337. package/src/cli/vendor/__tests__/VendorService.spec.ts +407 -0
  338. package/src/cli/vendor/atoms/vendorOptions.ts +41 -0
  339. package/src/cli/vendor/commands/VendorCommand.ts +204 -0
  340. package/src/cli/vendor/index.ts +43 -0
  341. package/src/cli/vendor/services/VendorService.ts +338 -0
  342. package/src/command/{providers → __tests__}/CliProvider.spec.ts +1 -1
  343. package/src/command/{helpers → __tests__}/EnvUtils.spec.ts +1 -1
  344. package/src/command/providers/CliProvider.ts +2 -2
  345. package/src/core/{primitives → __tests__}/$atom.spec.ts +2 -2
  346. package/src/core/{primitives → __tests__}/$memoize.spec.ts +1 -1
  347. package/src/core/{primitives → __tests__}/$mode.spec.ts +1 -1
  348. package/src/core/{primitives → __tests__}/$pipeline.spec.ts +1 -1
  349. package/src/core/{primitives → __tests__}/$scope.spec.ts +2 -2
  350. package/src/core/{providers → __tests__}/KeylessJsonSchemaCodec.spec.ts +1 -1
  351. package/src/core/{providers → __tests__}/SchemaValidator.spec.ts +1 -1
  352. package/src/core/{helpers → __tests__}/jsonSchemaToTypeBox.spec.ts +1 -1
  353. package/src/core/index.shared.ts +1 -1
  354. package/src/core/primitives/{$use.ts → $state.ts} +4 -4
  355. package/src/crypto/{providers → __tests__}/BrowserCryptoProvider.browser.spec.ts +1 -1
  356. package/src/crypto/{providers → __tests__}/CryptoProvider.spec.ts +1 -1
  357. package/src/datetime/{primitives → __tests__}/$debounce.spec.ts +1 -1
  358. package/src/datetime/{primitives → __tests__}/$throttle.spec.ts +1 -1
  359. package/src/datetime/{primitives → __tests__}/$timeout.spec.ts +1 -1
  360. package/src/email/brevo/{providers → __tests__}/BrevoEmailProvider.spec.ts +1 -1
  361. package/src/email/core/{providers → __tests__}/LocalEmailProvider.spec.ts +39 -150
  362. package/src/email/core/providers/LocalEmailProvider.ts +13 -51
  363. package/src/email/smtp/providers/NodemailerEmailProvider.ts +2 -2
  364. package/src/lock/core/{primitives → __tests__}/$lock.middleware.spec.ts +1 -1
  365. package/src/lock/core/primitives/$lock.ts +2 -2
  366. package/src/logger/index.ts +10 -4
  367. package/src/mcp/transports/SseMcpTransport.ts +2 -2
  368. package/src/orm/__tests__/ModelBuilder-tests.ts +53 -0
  369. package/src/orm/__tests__/ModelBuilder.spec.ts +80 -0
  370. package/src/orm/__tests__/organization-tests.ts +200 -0
  371. package/src/orm/__tests__/organization.spec.ts +103 -0
  372. package/src/orm/core/{providers/drivers → __tests__}/BunSqliteProvider.bun.spec.ts +5 -2
  373. package/src/orm/core/constants/PG_SYMBOLS.ts +2 -0
  374. package/src/orm/core/index.shared.ts +1 -0
  375. package/src/orm/core/primitives/$entity.ts +31 -0
  376. package/src/orm/core/providers/DatabaseTypeProvider.ts +11 -0
  377. package/src/orm/core/providers/DrizzleKitProvider.ts +1 -1
  378. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +2 -2
  379. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +3 -3
  380. package/src/orm/core/services/ModelBuilder.ts +11 -0
  381. package/src/orm/core/services/QueryManager.ts +16 -2
  382. package/src/orm/core/services/Repository.ts +70 -10
  383. package/src/orm/postgres/{providers → __tests__}/BunPostgresProvider.bun.spec.ts +1 -1
  384. package/src/orm/postgres/services/PostgresModelBuilder.ts +9 -1
  385. package/src/queue/core/providers/WorkerProvider.ts +2 -2
  386. package/src/queue/redis/providers/RedisQueueProvider.ts +2 -2
  387. package/src/react/core/{hooks → __tests__}/useAction.browser.spec.tsx +1 -1
  388. package/src/react/core/hooks/useAction.ts +7 -6
  389. package/src/react/head/{providers → __tests__}/BrowserHeadProvider.browser.spec.ts +1 -1
  390. package/src/react/head/{helpers → __tests__}/SeoExpander.spec.ts +1 -1
  391. package/src/react/i18n/{providers → __tests__}/I18nProvider.spec.ts +1 -1
  392. package/src/react/i18n/{hooks → __tests__}/useI18n.browser.spec.tsx +1 -1
  393. package/src/react/intro/components/GettingStartedDevtoolsSlide.tsx +3 -6
  394. package/src/react/router/{providers → __tests__}/ReactBrowserProvider.browser.spec.ts +1 -1
  395. package/src/react/router/providers/ReactBrowserProvider.ts +2 -2
  396. package/src/react/router/providers/ReactPageProvider.ts +2 -2
  397. package/src/react/router/providers/ReactServerProvider.ts +3 -3
  398. package/src/redis/{providers → __tests__}/BunRedisProvider.bun.spec.ts +4 -4
  399. package/src/retry/{primitives → __tests__}/$retry.middleware.spec.ts +1 -1
  400. package/src/router/{TemplatedPathParser.spec.ts → __tests__/TemplatedPathParser.spec.ts} +1 -1
  401. package/src/scheduler/primitives/$scheduler.ts +2 -2
  402. package/src/security/{primitives → __tests__}/$secure-browser.spec.ts +1 -1
  403. package/src/security/{primitives → __tests__}/$secure.spec.ts +1 -1
  404. package/src/security/primitives/$issuer.ts +1 -1
  405. package/src/security/providers/JwtProvider.ts +6 -10
  406. package/src/security/providers/SecurityProvider.ts +6 -11
  407. package/src/security/schemas/userAccountInfoSchema.ts +3 -3
  408. package/src/server/auth/providers/ServerAuthProvider.ts +24 -2
  409. package/src/server/cookies/{services → __tests__}/CookieParser.spec.ts +1 -1
  410. package/src/server/core/{primitives → __tests__}/$circuit.spec.ts +1 -1
  411. package/src/server/core/{providers → __tests__}/NodeHttpServerProvider.spec.ts +1 -1
  412. package/src/server/core/{providers → __tests__}/ServerBodyParserProvider.spec.ts +31 -1
  413. package/src/server/core/{providers → __tests__}/ServerCompressProvider.spec.ts +1 -1
  414. package/src/server/core/{providers → __tests__}/ServerHelmetProvider.spec.ts +4 -1
  415. package/src/server/core/{providers → __tests__}/ServerMultipartProvider.spec.ts +1 -1
  416. package/src/server/core/{services → __tests__}/ServerRequestParser.spec.ts +1 -1
  417. package/src/server/core/primitives/$action.ts +2 -2
  418. package/src/server/core/primitives/$sse.ts +2 -2
  419. package/src/server/core/providers/ServerBodyParserProvider.ts +21 -12
  420. package/src/server/core/providers/ServerCompressProvider.ts +2 -2
  421. package/src/server/core/providers/ServerHelmetProvider.ts +2 -2
  422. package/src/server/core/providers/ServerMultipartProvider.ts +2 -2
  423. package/src/server/core/providers/ServerRouterProvider.ts +1 -5
  424. package/src/server/cors/{primitives → __tests__}/$cors.spec.ts +1 -1
  425. package/src/server/cors/providers/ServerCorsProvider.ts +2 -2
  426. package/src/server/links/{services → __tests__}/BatchCollector.spec.ts +1 -1
  427. package/src/server/links/providers/LinkProvider.ts +2 -2
  428. package/src/server/links/providers/RemotePrimitiveProvider.ts +2 -2
  429. package/src/server/links/providers/ServerLinksProvider.ts +2 -2
  430. package/src/server/rate-limit/{primitives → __tests__}/$rateLimit.spec.ts +1 -1
  431. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +2 -2
  432. package/src/server/swagger/providers/ServerSwaggerProvider.ts +2 -2
  433. package/src/sms/{providers → __tests__}/LocalSmsProvider.spec.ts +35 -29
  434. package/src/sms/providers/LocalSmsProvider.ts +13 -24
  435. package/src/system/{providers → __tests__}/MemoryFileSystemProvider.spec.ts +1 -1
  436. package/src/system/{providers → __tests__}/MemoryShellProvider.spec.ts +1 -1
  437. package/src/topic/redis/providers/RedisTopicProvider.ts +2 -2
  438. package/src/websocket/{services → __tests__}/RoomManager.spec.ts +1 -1
  439. package/src/websocket/providers/NodeWebSocketServerProvider.ts +2 -2
  440. package/tsconfig.base.json +1 -0
  441. package/assets/devtools-ui/200.html +0 -10
  442. package/assets/devtools-ui/200.html.br +0 -0
  443. package/assets/devtools-ui/404.html +0 -10
  444. package/assets/devtools-ui/404.html.br +0 -0
  445. package/assets/devtools-ui/CNAME +0 -1
  446. package/assets/devtools-ui/asset.CHpVij2M.css +0 -1
  447. package/assets/devtools-ui/asset.CHpVij2M.css.br +0 -0
  448. package/assets/devtools-ui/asset.DJ-i0UDz.css +0 -1
  449. package/assets/devtools-ui/asset.DJ-i0UDz.css.br +0 -0
  450. package/assets/devtools-ui/chunk.1jwpJORo.js +0 -1
  451. package/assets/devtools-ui/chunk.1jwpJORo.js.br +0 -0
  452. package/assets/devtools-ui/chunk.B0r2wfUL.js +0 -1
  453. package/assets/devtools-ui/chunk.B0r2wfUL.js.br +0 -0
  454. package/assets/devtools-ui/chunk.BScN4dVR.js +0 -84
  455. package/assets/devtools-ui/chunk.BScN4dVR.js.br +0 -0
  456. package/assets/devtools-ui/chunk.BispuoY4.js +0 -1
  457. package/assets/devtools-ui/chunk.BispuoY4.js.br +0 -0
  458. package/assets/devtools-ui/chunk.BtrPUUd7.js +0 -2
  459. package/assets/devtools-ui/chunk.BtrPUUd7.js.br +0 -0
  460. package/assets/devtools-ui/chunk.C-KMHgqf.js +0 -1
  461. package/assets/devtools-ui/chunk.C-KMHgqf.js.br +0 -0
  462. package/assets/devtools-ui/chunk.C2zQ3CF6.js +0 -7
  463. package/assets/devtools-ui/chunk.C2zQ3CF6.js.br +0 -0
  464. package/assets/devtools-ui/chunk.C619McpO.js +0 -1
  465. package/assets/devtools-ui/chunk.C619McpO.js.br +0 -0
  466. package/assets/devtools-ui/chunk.C9OsYsVl.js +0 -1
  467. package/assets/devtools-ui/chunk.C9OsYsVl.js.br +0 -3
  468. package/assets/devtools-ui/chunk.CAC_-151.js +0 -1
  469. package/assets/devtools-ui/chunk.CAC_-151.js.br +0 -0
  470. package/assets/devtools-ui/chunk.CCmesWfx.js +0 -1
  471. package/assets/devtools-ui/chunk.CCmesWfx.js.br +0 -0
  472. package/assets/devtools-ui/chunk.CFQDmrcV.js +0 -1
  473. package/assets/devtools-ui/chunk.CFQDmrcV.js.br +0 -0
  474. package/assets/devtools-ui/chunk.CgM71Zau.js +0 -1
  475. package/assets/devtools-ui/chunk.CgM71Zau.js.br +0 -0
  476. package/assets/devtools-ui/chunk.CmHq336a.js +0 -1
  477. package/assets/devtools-ui/chunk.CmHq336a.js.br +0 -0
  478. package/assets/devtools-ui/chunk.CthNMCar.js +0 -1
  479. package/assets/devtools-ui/chunk.CthNMCar.js.br +0 -0
  480. package/assets/devtools-ui/chunk.D2brVJP1.js +0 -1
  481. package/assets/devtools-ui/chunk.D2brVJP1.js.br +0 -0
  482. package/assets/devtools-ui/chunk.DgBKGkiw.js +0 -1
  483. package/assets/devtools-ui/chunk.DgBKGkiw.js.br +0 -0
  484. package/assets/devtools-ui/chunk.NNHHCQsa.js +0 -1
  485. package/assets/devtools-ui/chunk.NNHHCQsa.js.br +0 -0
  486. package/assets/devtools-ui/chunk._CDKKWMo.js +0 -1
  487. package/assets/devtools-ui/chunk._CDKKWMo.js.br +0 -0
  488. package/assets/devtools-ui/entry.B_nOjAod.js +0 -2
  489. package/assets/devtools-ui/entry.B_nOjAod.js.br +0 -0
  490. package/assets/devtools-ui/index.html +0 -10
  491. package/assets/devtools-ui/index.html.br +0 -0
  492. package/dist/devtools/index.browser.js +0 -224
  493. package/dist/devtools/index.browser.js.map +0 -1
  494. package/dist/devtools/index.d.ts +0 -499
  495. package/dist/devtools/index.d.ts.map +0 -1
  496. package/dist/devtools/index.js +0 -782
  497. package/dist/devtools/index.js.map +0 -1
  498. package/dist/mqtt/index.d.ts +0 -164
  499. package/dist/mqtt/index.d.ts.map +0 -1
  500. package/dist/mqtt/index.js +0 -214
  501. package/dist/mqtt/index.js.map +0 -1
  502. package/dist/topic/mqtt/index.d.ts +0 -87
  503. package/dist/topic/mqtt/index.d.ts.map +0 -1
  504. package/dist/topic/mqtt/index.js +0 -88
  505. package/dist/topic/mqtt/index.js.map +0 -1
  506. package/src/api/users/parameters/UserParameters.ts +0 -23
  507. package/src/api/users/services/SessionService.spec.ts +0 -303
  508. package/src/cli/platform/adapters/DockerAdapter.spec.ts +0 -378
  509. package/src/cli/platform/adapters/DockerAdapter.ts +0 -417
  510. package/src/cli/platform/services/DockerComposeGenerator.spec.ts +0 -490
  511. package/src/cli/platform/services/DockerComposeGenerator.ts +0 -353
  512. package/src/cli/platform/services/DockerSshService.spec.ts +0 -47
  513. package/src/cli/platform/services/DockerSshService.ts +0 -61
  514. package/src/devtools/__tests__/DevCollectorProvider.spec.ts +0 -7
  515. package/src/devtools/assets.ts +0 -6
  516. package/src/devtools/entities/logs.ts +0 -21
  517. package/src/devtools/index.browser.ts +0 -11
  518. package/src/devtools/index.shared.ts +0 -15
  519. package/src/devtools/index.ts +0 -39
  520. package/src/devtools/providers/DevToolsMetadataProvider.ts +0 -459
  521. package/src/devtools/providers/DevToolsProvider.ts +0 -280
  522. package/src/devtools/schemas/DevActionMetadata.ts +0 -30
  523. package/src/devtools/schemas/DevAtomMetadata.ts +0 -26
  524. package/src/devtools/schemas/DevBucketMetadata.ts +0 -11
  525. package/src/devtools/schemas/DevCacheMetadata.ts +0 -10
  526. package/src/devtools/schemas/DevEntityMetadata.ts +0 -60
  527. package/src/devtools/schemas/DevEnvMetadata.ts +0 -22
  528. package/src/devtools/schemas/DevMetadata.ts +0 -47
  529. package/src/devtools/schemas/DevModuleMetadata.ts +0 -8
  530. package/src/devtools/schemas/DevPageMetadata.ts +0 -24
  531. package/src/devtools/schemas/DevProviderMetadata.ts +0 -10
  532. package/src/devtools/schemas/DevQueueMetadata.ts +0 -10
  533. package/src/devtools/schemas/DevRealmMetadata.ts +0 -19
  534. package/src/devtools/schemas/DevRouteMetadata.ts +0 -8
  535. package/src/devtools/schemas/DevSchedulerMetadata.ts +0 -11
  536. package/src/devtools/schemas/DevTopicMetadata.ts +0 -11
  537. package/src/mqtt/index.ts +0 -32
  538. package/src/mqtt/providers/MqttClientProvider.ts +0 -63
  539. package/src/mqtt/providers/MqttJsClientProvider.spec.ts +0 -165
  540. package/src/mqtt/providers/MqttJsClientProvider.ts +0 -309
  541. package/src/topic/mqtt/index.ts +0 -30
  542. package/src/topic/mqtt/providers/MqttTopicProvider.spec.ts +0 -160
  543. package/src/topic/mqtt/providers/MqttTopicProvider.ts +0 -146
  544. /package/src/api/audits/{primitives → __tests__}/$audit.spec.ts +0 -0
  545. /package/src/api/audits/{services → __tests__}/AuditService.spec.ts +0 -0
  546. /package/src/api/files/{controllers → __tests__}/AdminFileStatsController.spec.ts +0 -0
  547. /package/src/api/files/{jobs → __tests__}/FileJobs.spec.ts +0 -0
  548. /package/src/api/jobs/{primitives → __tests__}/$job-middleware.spec.ts +0 -0
  549. /package/src/api/parameters/{primitives → __tests__}/$parameter.spec.ts +0 -0
  550. /package/src/api/users/{controllers → __tests__}/AdminIdentityController.spec.ts +0 -0
  551. /package/src/api/users/{controllers → __tests__}/AdminSessionController.spec.ts +0 -0
  552. /package/src/api/users/{controllers → __tests__}/AdminUserController.spec.ts +0 -0
  553. /package/src/api/users/{services → __tests__}/CredentialService.spec.ts +0 -0
  554. /package/src/api/users/{services → __tests__}/RegistrationService.spec.ts +0 -0
  555. /package/src/batch/{primitives → __tests__}/$batch.spec.ts +0 -0
  556. /package/src/batch/{providers → __tests__}/BatchProvider.spec.ts +0 -0
  557. /package/src/bucket/{primitives → __tests__}/$bucket.spec.ts +0 -0
  558. /package/src/bucket/{providers → __tests__}/FileStorageProvider.spec.ts +0 -0
  559. /package/src/bucket/{providers → __tests__}/LocalFileStorageProvider.spec.ts +0 -0
  560. /package/src/bucket/{providers → __tests__}/MemoryFileStorageProvider.spec.ts +0 -0
  561. /package/src/cache/core/{primitives → __tests__}/$cache.spec.ts +0 -0
  562. /package/src/cache/redis/{providers → __tests__}/RedisCacheProvider.spec.ts +0 -0
  563. /package/src/command/{primitives → __tests__}/$command.spec.ts +0 -0
  564. /package/src/command/{helpers → __tests__}/Asker.spec.ts +0 -0
  565. /package/src/command/{helpers → __tests__}/Runner.spec.ts +0 -0
  566. /package/src/core/{primitives → __tests__}/$context.spec.ts +0 -0
  567. /package/src/core/{primitives → __tests__}/$env.spec.ts +0 -0
  568. /package/src/core/{primitives → __tests__}/$hook.spec.ts +0 -0
  569. /package/src/core/{primitives → __tests__}/$inject.spec.ts +0 -0
  570. /package/src/core/{primitives → __tests__}/$module.spec.ts +0 -0
  571. /package/src/core/{providers → __tests__}/CodecManager.spec.ts +0 -0
  572. /package/src/core/{providers → __tests__}/EventManager.spec.ts +0 -0
  573. /package/src/core/{providers → __tests__}/StateManager.spec.ts +0 -0
  574. /package/src/core/{providers → __tests__}/TypeProvider.spec.ts +0 -0
  575. /package/src/datetime/{primitives → __tests__}/$interval.spec.ts +0 -0
  576. /package/src/datetime/{providers → __tests__}/DateTimeProvider.spec.ts +0 -0
  577. /package/src/email/core/{primitives → __tests__}/$email.spec.ts +0 -0
  578. /package/src/fake/{providers → __tests__}/FakeProvider.spec.ts +0 -0
  579. /package/src/lock/core/{providers → __tests__}/MemoryLockProvider.spec.ts +0 -0
  580. /package/src/lock/redis/{providers → __tests__}/RedisLockProvider.spec.ts +0 -0
  581. /package/src/logger/{primitives → __tests__}/$logger.spec.ts +0 -0
  582. /package/src/logger/{services → __tests__}/Logger.spec.ts +0 -0
  583. /package/src/mcp/{primitives → __tests__}/$prompt.spec.ts +0 -0
  584. /package/src/mcp/{primitives → __tests__}/$resource.spec.ts +0 -0
  585. /package/src/mcp/{primitives → __tests__}/$tool.spec.ts +0 -0
  586. /package/src/mcp/{providers → __tests__}/McpServerProvider.spec.ts +0 -0
  587. /package/src/mcp/{helpers → __tests__}/jsonrpc.spec.ts +0 -0
  588. /package/src/orm/core/{helpers → __tests__}/parseQueryString.spec.ts +0 -0
  589. /package/src/queue/core/{primitives → __tests__}/$consumer.spec.ts +0 -0
  590. /package/src/queue/core/{providers → __tests__}/MemoryQueueProvider.spec.ts +0 -0
  591. /package/src/queue/core/{providers → __tests__}/WorkerProvider.spec.ts +0 -0
  592. /package/src/queue/redis/{providers → __tests__}/RedisQueueProvider.spec.ts +0 -0
  593. /package/src/react/form/{hooks → __tests__}/useForm.browser.spec.tsx +0 -0
  594. /package/src/react/head/{hooks → __tests__}/useHead.spec.tsx +0 -0
  595. /package/src/react/i18n/{components → __tests__}/Localize.spec.tsx +0 -0
  596. /package/src/react/router/{primitives → __tests__}/$page.browser.spec.tsx +0 -0
  597. /package/src/react/router/{primitives → __tests__}/$page.middleware.spec.tsx +0 -0
  598. /package/src/react/router/{primitives → __tests__}/$page.spec.tsx +0 -0
  599. /package/src/react/router/{providers → __tests__}/ReactPreloadProvider.spec.ts +0 -0
  600. /package/src/react/router/{providers → __tests__}/ReactServerProvider.spec.tsx +0 -0
  601. /package/src/react/router/{providers → __tests__}/ReactServerTemplateProvider.spec.ts +0 -0
  602. /package/src/retry/{primitives → __tests__}/$retry.spec.ts +0 -0
  603. /package/src/retry/{providers → __tests__}/RetryProvider.spec.ts +0 -0
  604. /package/src/router/{providers → __tests__}/RouterProvider.spec.ts +0 -0
  605. /package/src/security/{primitives → __tests__}/$issuer.spec.ts +0 -0
  606. /package/src/security/{primitives → __tests__}/$permission.spec.ts +0 -0
  607. /package/src/security/{primitives → __tests__}/$role.spec.ts +0 -0
  608. /package/src/security/{primitives → __tests__}/$serviceAccount.spec.ts +0 -0
  609. /package/src/security/{providers → __tests__}/SecurityProvider.spec.ts +0 -0
  610. /package/src/server/cookies/{providers → __tests__}/ServerCookiesProvider.spec.ts +0 -0
  611. /package/src/server/core/{primitives → __tests__}/$action.spec.ts +0 -0
  612. /package/src/server/core/{primitives → __tests__}/$middleware.spec.ts +0 -0
  613. /package/src/server/core/{primitives → __tests__}/$route.spec.ts +0 -0
  614. /package/src/server/core/{primitives → __tests__}/$sse.spec.ts +0 -0
  615. /package/src/server/core/{providers → __tests__}/BunHttpServerProvider.bun.spec.ts +0 -0
  616. /package/src/server/core/{services → __tests__}/HttpClient.spec.ts +0 -0
  617. /package/src/server/core/{providers → __tests__}/ServerLoggerProvider.spec.ts +0 -0
  618. /package/src/server/core/{services → __tests__}/UserAgentParser.spec.ts +0 -0
  619. /package/src/server/cors/{providers → __tests__}/ServerCorsProvider.spec.ts +0 -0
  620. /package/src/server/etag/{providers → __tests__}/ServerEtagProvider.spec.ts +0 -0
  621. /package/src/server/health/{providers → __tests__}/ServerHealthProvider.spec.ts +0 -0
  622. /package/src/server/links/{primitives → __tests__}/$remote.spec.ts +0 -0
  623. /package/src/server/links/{services → __tests__}/BatchEndpoint.spec.ts +0 -0
  624. /package/src/server/links/{providers → __tests__}/LinkProvider.spec.ts +0 -0
  625. /package/src/server/links/{providers → __tests__}/ServerLinksProvider.spec.ts +0 -0
  626. /package/src/server/metrics/{providers → __tests__}/ServerMetricsProvider.spec.ts +0 -0
  627. /package/src/server/proxy/{primitives → __tests__}/$proxy.spec.ts +0 -0
  628. /package/src/server/rate-limit/{providers → __tests__}/ServerRateLimitProvider.spec.ts +0 -0
  629. /package/src/server/static/{primitives → __tests__}/$serve.spec.ts +0 -0
  630. /package/src/server/swagger/{primitives → __tests__}/$swagger.spec.ts +0 -0
  631. /package/src/sms/{primitives → __tests__}/$sms.spec.ts +0 -0
  632. /package/src/sms/{providers → __tests__}/MemorySmsProvider.spec.ts +0 -0
  633. /package/src/system/{services → __tests__}/FileDetector.spec.ts +0 -0
  634. /package/src/system/{providers → __tests__}/NodeFileSystemProvider.spec.ts +0 -0
  635. /package/src/topic/core/{primitives → __tests__}/$subscriber.spec.ts +0 -0
  636. /package/src/topic/core/{providers → __tests__}/MemoryTopicProvider.spec.ts +0 -0
  637. /package/src/topic/redis/{providers → __tests__}/RedisTopicProvider.spec.ts +0 -0
  638. /package/src/websocket/{primitives → __tests__}/$channel.spec.ts +0 -0
@@ -1,23 +1,75 @@
1
1
  import { $atom, $context, $inject, $module, Alepha, AlephaError, t } from "alepha";
2
- import { AlephaEmail } from "alepha/email";
2
+ import { AuditService } from "alepha/api/audits";
3
+ import { $bucket } from "alepha/bucket";
3
4
  import { $issuer, $permission, $secure, CryptoProvider, InvalidCredentialsError, SecurityProvider } from "alepha/security";
4
5
  import { $action, BadRequestError, ConflictError, HttpError, UnauthorizedError, okSchema } from "alepha/server";
5
- import { $entity, $repository, db, pageQuerySchema, parseQueryString } from "alepha/orm";
6
+ import { $entity, $repository, db, pageQuerySchema, parseQueryString, sql } from "alepha/orm";
6
7
  import { $logger } from "alepha/logger";
7
- import { AuditService } from "alepha/api/audits";
8
8
  import { $client } from "alepha/server/links";
9
9
  import { $notification } from "alepha/api/notifications";
10
10
  import { $authCredentials, $authGithub, $authGoogle, ServerAuthProvider, authenticationProviderSchema } from "alepha/server/auth";
11
11
  import { $etag } from "alepha/server/etag";
12
12
  import { randomInt, randomUUID } from "node:crypto";
13
- import { $cache } from "alepha/cache";
13
+ import { $cache, CacheProvider } from "alepha/cache";
14
14
  import { DateTimeProvider } from "alepha/datetime";
15
- import { FileSystemProvider } from "alepha/system";
16
- import { $bucket } from "alepha/bucket";
17
15
  import { $job } from "alepha/api/jobs";
18
- import { $parameter, AlephaApiParameters } from "alepha/api/parameters";
16
+ import { FileSystemProvider } from "alepha/system";
19
17
  import { AlephaApiKeys, ApiKeyService } from "alepha/api/keys";
18
+ import { $parameter, AlephaApiParameters } from "alepha/api/parameters";
20
19
  import { AlephaApiVerification } from "alepha/api/verifications";
20
+ //#region ../../src/api/users/audits/UserAudits.ts
21
+ /**
22
+ * User-specific audit wrapper service.
23
+ *
24
+ * This service wraps the core AuditService to provide user-related audit logging.
25
+ * It is lazy-loaded when the `audits` feature is enabled in the realm.
26
+ */
27
+ var UserAudits = class {
28
+ auditService = $inject(AuditService);
29
+ /**
30
+ * Record a user-related audit event.
31
+ */
32
+ recordUser(action, context) {
33
+ return this.auditService.recordUser(action, context);
34
+ }
35
+ /**
36
+ * Record an authentication-related audit event.
37
+ */
38
+ recordAuth(action, context) {
39
+ return this.auditService.recordAuth(action, context);
40
+ }
41
+ /**
42
+ * Record a generic audit event.
43
+ */
44
+ record(category, action, context) {
45
+ return this.auditService.record(category, action, context);
46
+ }
47
+ };
48
+ //#endregion
49
+ //#region ../../src/api/users/buckets/UserBuckets.ts
50
+ /**
51
+ * User-specific file storage wrapper service.
52
+ *
53
+ * This service provides file storage for user-related files such as:
54
+ * - User avatars/profile pictures
55
+ *
56
+ * It is lazy-loaded when the `avatars` feature is enabled in the realm.
57
+ */
58
+ var UserBuckets = class {
59
+ /**
60
+ * Bucket for user avatar storage.
61
+ */
62
+ avatars = $bucket({
63
+ maxSize: 5 * 1024 * 1024,
64
+ mimeTypes: [
65
+ "image/jpeg",
66
+ "image/png",
67
+ "image/gif",
68
+ "image/webp"
69
+ ]
70
+ });
71
+ };
72
+ //#endregion
21
73
  //#region ../../src/api/users/schemas/identityQuerySchema.ts
22
74
  const identityQuerySchema = t.extend(pageQuerySchema, {
23
75
  userId: t.optional(t.uuid()),
@@ -36,7 +88,7 @@ const users = $entity({
36
88
  realm: db.default(t.text(), DEFAULT_USER_REALM_NAME),
37
89
  username: t.optional(t.shortText({
38
90
  minLength: 3,
39
- maxLength: 50
91
+ maxLength: 30
40
92
  })),
41
93
  email: t.optional(t.string({ format: "email" })),
42
94
  phoneNumber: t.optional(t.e164()),
@@ -45,12 +97,14 @@ const users = $entity({
45
97
  lastName: t.optional(t.string()),
46
98
  picture: t.optional(t.string()),
47
99
  enabled: db.default(t.boolean(), true),
48
- emailVerified: db.default(t.boolean(), false)
100
+ emailVerified: db.default(t.boolean(), false),
101
+ organizationId: db.organization()
49
102
  }),
50
103
  indexes: [
51
104
  {
52
- columns: ["realm", "username"],
53
- unique: true
105
+ expressions: (self) => [self.realm, sql`LOWER(${self.username})`],
106
+ unique: true,
107
+ name: "users_realm_username_lower_idx"
54
108
  },
55
109
  {
56
110
  columns: ["realm", "email"],
@@ -91,35 +145,6 @@ const identities = $entity({
91
145
  //#region ../../src/api/users/schemas/identityResourceSchema.ts
92
146
  const identityResourceSchema = t.omit(identities.schema, ["password"]);
93
147
  //#endregion
94
- //#region ../../src/api/users/audits/UserAudits.ts
95
- /**
96
- * User-specific audit wrapper service.
97
- *
98
- * This service wraps the core AuditService to provide user-related audit logging.
99
- * It is lazy-loaded when the `audits` feature is enabled in the realm.
100
- */
101
- var UserAudits = class {
102
- auditService = $inject(AuditService);
103
- /**
104
- * Record a user-related audit event.
105
- */
106
- recordUser(action, context) {
107
- return this.auditService.recordUser(action, context);
108
- }
109
- /**
110
- * Record an authentication-related audit event.
111
- */
112
- recordAuth(action, context) {
113
- return this.auditService.recordAuth(action, context);
114
- }
115
- /**
116
- * Record a generic audit event.
117
- */
118
- record(category, action, context) {
119
- return this.auditService.record(category, action, context);
120
- }
121
- };
122
- //#endregion
123
148
  //#region ../../src/api/users/atoms/realmAuthSettingsAtom.ts
124
149
  const fieldRequirement = (description) => t.union([
125
150
  t.const("none"),
@@ -153,6 +178,23 @@ const realmAuthSettingsAtom = $atom({
153
178
  requireLowercase: t.boolean({ description: "Require at least one lowercase letter" }),
154
179
  requireNumbers: t.boolean({ description: "Require at least one number" }),
155
180
  requireSpecialCharacters: t.boolean({ description: "Require at least one special character" })
181
+ }),
182
+ loginRateLimit: t.object({
183
+ ipMaxAttempts: t.integer({
184
+ description: "Max failed login attempts per IP before temporary lockout",
185
+ default: 15,
186
+ minimum: 1
187
+ }),
188
+ accountMaxAttempts: t.integer({
189
+ description: "Max failed login attempts per account before temporary lockout",
190
+ default: 5,
191
+ minimum: 1
192
+ }),
193
+ windowMs: t.integer({
194
+ description: "Rate limit window duration in milliseconds",
195
+ default: 900 * 1e3,
196
+ minimum: 1e3
197
+ })
156
198
  })
157
199
  }),
158
200
  default: {
@@ -173,6 +215,11 @@ const realmAuthSettingsAtom = $atom({
173
215
  requireLowercase: true,
174
216
  requireNumbers: true,
175
217
  requireSpecialCharacters: false
218
+ },
219
+ loginRateLimit: {
220
+ ipMaxAttempts: 15,
221
+ accountMaxAttempts: 5,
222
+ windowMs: 900 * 1e3
176
223
  }
177
224
  }
178
225
  });
@@ -217,8 +264,9 @@ var RealmProvider = class {
217
264
  defaultUsers = $repository(users);
218
265
  realms = /* @__PURE__ */ new Map();
219
266
  register(realmName, realmOptions = {}) {
267
+ if (realmName.includes(".")) throw new AlephaError(`Realm name "${realmName}" must not contain dots — dots are reserved for parameter tree paths`);
220
268
  const features = {
221
- sessionPurge: false,
269
+ jobs: false,
222
270
  notifications: false,
223
271
  apiKeys: false,
224
272
  parameters: false,
@@ -226,7 +274,7 @@ var RealmProvider = class {
226
274
  audits: false,
227
275
  ...realmOptions.features
228
276
  };
229
- this.realms.set(realmName, {
277
+ const realm = {
230
278
  name: realmName,
231
279
  repositories: {
232
280
  identities: realmOptions.entities?.identities ?? this.defaultIdentities,
@@ -239,10 +287,19 @@ var RealmProvider = class {
239
287
  passwordPolicy: {
240
288
  ...realmAuthSettingsAtom.options.default.passwordPolicy,
241
289
  ...realmOptions.settings?.passwordPolicy
290
+ },
291
+ loginRateLimit: {
292
+ ...realmAuthSettingsAtom.options.default.loginRateLimit,
293
+ ...realmOptions.settings?.loginRateLimit
242
294
  }
243
295
  },
244
- features
245
- });
296
+ features,
297
+ getSettings: async function() {
298
+ if (this.settingsParameter) return await this.settingsParameter.get();
299
+ return this.settings;
300
+ }
301
+ };
302
+ this.realms.set(realmName, realm);
246
303
  return this.getRealm(realmName);
247
304
  }
248
305
  /**
@@ -880,7 +937,7 @@ var UserService = class {
880
937
  });
881
938
  const realm = this.realmProvider.getRealm(userRealmName);
882
939
  if (data.username) {
883
- if (await this.users(userRealmName).findOne({ where: { username: { eq: data.username } } })) {
940
+ if (await this.users(userRealmName).findOne({ where: { username: { ilike: data.username } } })) {
884
941
  this.log.debug("Username already taken", { username: data.username });
885
942
  throw new BadRequestError("User with this username already exists");
886
943
  }
@@ -1089,13 +1146,15 @@ var RealmController = class {
1089
1146
  group: this.group,
1090
1147
  method: "GET",
1091
1148
  path: `${this.url}/config`,
1092
- use: [$etag({ control: { maxAge: [24, "hours"] } })],
1149
+ use: [$etag()],
1093
1150
  schema: {
1094
1151
  query: t.object({ realmName: t.optional(t.string()) }),
1095
1152
  response: realmConfigSchema
1096
1153
  },
1097
- handler: ({ query }) => {
1098
- const { name: realmName, settings } = this.realmProvider.getRealm(query.realmName);
1154
+ handler: async ({ query }) => {
1155
+ const realm = this.realmProvider.getRealm(query.realmName);
1156
+ const settings = await realm.getSettings();
1157
+ const realmName = realm.name;
1099
1158
  return {
1100
1159
  settings,
1101
1160
  realmName,
@@ -1448,7 +1507,7 @@ var RegistrationService = class {
1448
1507
  username: body.username,
1449
1508
  userRealmName
1450
1509
  });
1451
- const realmSettings = this.realmProvider.getRealm(userRealmName).settings;
1510
+ const realmSettings = await this.realmProvider.getRealm(userRealmName).getSettings();
1452
1511
  if (realmSettings?.registrationAllowed === false) {
1453
1512
  this.log.warn("Registration not allowed for realm", { userRealmName });
1454
1513
  throw new BadRequestError("Registration is not allowed");
@@ -1606,7 +1665,7 @@ var RegistrationService = class {
1606
1665
  async checkUserAvailability(body, userRealmName) {
1607
1666
  const userRepository = this.realmProvider.userRepository(userRealmName);
1608
1667
  if (body.username) {
1609
- if (await userRepository.findOne({ where: { username: { eq: body.username } } })) {
1668
+ if (await userRepository.findOne({ where: { username: { ilike: body.username } } })) {
1610
1669
  this.log.debug("Username already taken", { username: body.username });
1611
1670
  throw new ConflictError("User with this username already exists");
1612
1671
  }
@@ -1929,8 +1988,46 @@ var UserController = class {
1929
1988
  });
1930
1989
  };
1931
1990
  //#endregion
1991
+ //#region ../../src/api/users/jobs/UserJobs.ts
1992
+ /**
1993
+ * User-specific jobs wrapper service.
1994
+ *
1995
+ * This service handles user-related scheduled jobs such as:
1996
+ * - Session purge (cleaning up expired sessions)
1997
+ * - Verification code cleanup
1998
+ * - Inactive user notifications
1999
+ *
2000
+ * It is lazy-loaded when the `sessionPurge` feature is enabled in the realm.
2001
+ */
2002
+ var UserJobs = class {
2003
+ log = $logger();
2004
+ dateTimeProvider = $inject(DateTimeProvider);
2005
+ sessionRepository = $repository(sessions);
2006
+ /**
2007
+ * Purge expired sessions from the database.
2008
+ *
2009
+ * This job runs daily at 3:00 AM and removes all sessions
2010
+ * where the `expiresAt` timestamp has passed.
2011
+ */
2012
+ purgeExpiredSessions = $job({
2013
+ cron: "0 0 * * *",
2014
+ handler: async () => {
2015
+ const now = this.dateTimeProvider.nowISOString();
2016
+ this.log.info("Starting expired sessions purge", { cutoffTime: now });
2017
+ const expiredSessions = await this.sessionRepository.findMany({ where: { expiresAt: { lt: now } } });
2018
+ if (expiredSessions.length === 0) {
2019
+ this.log.info("No expired sessions found");
2020
+ return;
2021
+ }
2022
+ this.log.info("Found expired sessions", { count: expiredSessions.length });
2023
+ const deletedIds = await this.sessionRepository.deleteMany({ expiresAt: { lt: now } });
2024
+ this.log.info("Expired sessions purged successfully", { deletedCount: deletedIds.length });
2025
+ }
2026
+ });
2027
+ };
2028
+ //#endregion
1932
2029
  //#region ../../src/api/users/services/SessionService.ts
1933
- var SessionService = class {
2030
+ var SessionService = class SessionService {
1934
2031
  alepha = $inject(Alepha);
1935
2032
  fsp = $inject(FileSystemProvider);
1936
2033
  dateTimeProvider = $inject(DateTimeProvider);
@@ -1938,6 +2035,7 @@ var SessionService = class {
1938
2035
  log = $logger();
1939
2036
  realmProvider = $inject(RealmProvider);
1940
2037
  fileController = $client();
2038
+ cacheProvider = $inject(CacheProvider);
1941
2039
  userAudits(realmName) {
1942
2040
  if (this.realmProvider.getRealm(realmName).features.audits) return this.alepha.inject(UserAudits);
1943
2041
  }
@@ -1956,7 +2054,9 @@ var SessionService = class {
1956
2054
  */
1957
2055
  async ensureAdminRole(user, userRealmName) {
1958
2056
  if (user.roles.includes("admin")) return false;
1959
- const { settings, name } = this.realmProvider.getRealm(userRealmName);
2057
+ const realm = this.realmProvider.getRealm(userRealmName);
2058
+ const settings = await realm.getSettings();
2059
+ const { name } = realm;
1960
2060
  const adminEmails = settings.adminEmails ?? [];
1961
2061
  const adminUsernames = settings.adminUsernames ?? [];
1962
2062
  const isAdminByEmail = user.email && adminEmails.includes(user.email);
@@ -1985,22 +2085,94 @@ var SessionService = class {
1985
2085
  return true;
1986
2086
  }
1987
2087
  /**
2088
+ * Generate a unique username from an OAuth profile.
2089
+ *
2090
+ * 1. Extract candidate from email prefix
2091
+ * 2. Sanitize against realm's usernameRegExp (strip invalid chars, truncate)
2092
+ * 3. Check case-insensitive uniqueness, append suffix (2, 3, ...) if taken
2093
+ * 4. Fall back to "user" + random 6-char alphanumeric if all else fails
2094
+ */
2095
+ async generateUniqueUsername(profile, realmSettings, users) {
2096
+ const maxLength = 30;
2097
+ const maxSuffixAttempts = 10;
2098
+ let candidate = profile.email?.split("@")[0] ?? profile.name ?? "";
2099
+ candidate = candidate.replace(/[^a-zA-Z0-9_.-]/g, "");
2100
+ if (realmSettings?.usernameRegExp) try {
2101
+ if (!new RegExp(realmSettings.usernameRegExp).test(candidate)) candidate = candidate.replace(/[^a-zA-Z0-9_]/g, "");
2102
+ } catch {}
2103
+ if (candidate.length < 3) candidate = `user${candidate}`;
2104
+ candidate = candidate.slice(0, maxLength - 2);
2105
+ const isAvailable = async (name) => {
2106
+ return !(await users.findMany({
2107
+ where: { username: { contains: name } },
2108
+ limit: 1
2109
+ })).some((u) => u.username?.toLowerCase() === name.toLowerCase());
2110
+ };
2111
+ if (await isAvailable(candidate)) return candidate;
2112
+ for (let i = 2; i <= maxSuffixAttempts + 1; i++) {
2113
+ const withSuffix = `${candidate}${i}`;
2114
+ if (withSuffix.length <= maxLength && await isAvailable(withSuffix)) return withSuffix;
2115
+ }
2116
+ return `user${Math.random().toString(36).slice(2, 8)}`;
2117
+ }
2118
+ /**
1988
2119
  * Random delay to prevent timing attacks (50-200ms)
1989
2120
  * Uses cryptographically secure random number generation
1990
2121
  */
1991
2122
  randomDelay() {
1992
2123
  return new Promise((resolve) => setTimeout(resolve, randomInt(50, 201)));
1993
2124
  }
2125
+ static LOGIN_CACHE_NAME = "login-rate-limit";
2126
+ /**
2127
+ * Check if a login key is currently locked out.
2128
+ * Read-only — does not increment the counter.
2129
+ */
2130
+ async isLoginLocked(key, max) {
2131
+ try {
2132
+ const count = await this.cacheProvider.getTyped(SessionService.LOGIN_CACHE_NAME, key);
2133
+ return count != null && count >= max;
2134
+ } catch (error) {
2135
+ this.log.warn("Failed to check login rate limit, allowing attempt", error);
2136
+ return false;
2137
+ }
2138
+ }
2139
+ /**
2140
+ * Record a failed login attempt. Uses getTyped + setTyped (not incr) so that
2141
+ * each write refreshes the TTL — implementing sliding-window behavior.
2142
+ *
2143
+ * Returns `true` if this failure just crossed the lockout threshold.
2144
+ */
2145
+ async recordFailedLogin(key, max, windowMs) {
2146
+ try {
2147
+ const newCount = (await this.cacheProvider.getTyped(SessionService.LOGIN_CACHE_NAME, key) ?? 0) + 1;
2148
+ await this.cacheProvider.setTyped(SessionService.LOGIN_CACHE_NAME, key, newCount, { ttl: windowMs });
2149
+ return newCount === max;
2150
+ } catch (error) {
2151
+ this.log.warn("Failed to record failed login attempt", error);
2152
+ return false;
2153
+ }
2154
+ }
1994
2155
  /**
1995
2156
  * Validate user credentials and return the user if valid.
1996
2157
  */
1997
2158
  async login(provider, username, password, userRealmName) {
1998
- const { settings, name } = this.realmProvider.getRealm(userRealmName);
2159
+ const realm = this.realmProvider.getRealm(userRealmName);
2160
+ const settings = await realm.getSettings();
2161
+ const { name } = realm;
2162
+ const { loginRateLimit } = settings;
1999
2163
  const isEmail = username.includes("@");
2000
2164
  const isPhone = /^[+\d][\d\s()-]+$/.test(username);
2001
2165
  const isUsername = !isEmail && !isPhone;
2002
2166
  const identities = this.identities(userRealmName);
2003
2167
  const users = this.users(userRealmName);
2168
+ const request = this.alepha.store.get("alepha.http.request");
2169
+ const ipKey = request?.ip ? `login:ip:${request.ip}` : void 0;
2170
+ if (ipKey) {
2171
+ if (await this.isLoginLocked(ipKey, loginRateLimit.ipMaxAttempts)) {
2172
+ this.log.warn("Login blocked — IP rate limit exceeded", { ip: request?.ip });
2173
+ throw new InvalidCredentialsError();
2174
+ }
2175
+ }
2004
2176
  await this.randomDelay();
2005
2177
  try {
2006
2178
  const where = users.createQueryWhere();
@@ -2024,7 +2196,7 @@ var SessionService = class {
2024
2196
  throw new InvalidCredentialsError();
2025
2197
  }
2026
2198
  }
2027
- where.username = username;
2199
+ where.username = { ilike: username };
2028
2200
  } else if (settings.email !== "none" && isEmail) where.email = username;
2029
2201
  else if (settings.phoneNumber !== "none" && isPhone) where.phoneNumber = username;
2030
2202
  else {
@@ -2058,6 +2230,22 @@ var SessionService = class {
2058
2230
  username
2059
2231
  }
2060
2232
  });
2233
+ if (ipKey) {
2234
+ if (await this.recordFailedLogin(ipKey, loginRateLimit.ipMaxAttempts, loginRateLimit.windowMs)) await this.userAudits(userRealmName)?.record("security", "rate_limited", {
2235
+ userRealm: name,
2236
+ success: false,
2237
+ description: "IP temporarily locked due to too many failed login attempts",
2238
+ metadata: { ip: request?.ip }
2239
+ });
2240
+ }
2241
+ throw new InvalidCredentialsError();
2242
+ }
2243
+ const accountKey = `login:account:${name}:${user.id}`;
2244
+ if (await this.isLoginLocked(accountKey, loginRateLimit.accountMaxAttempts)) {
2245
+ this.log.warn("Login blocked — account rate limit exceeded", {
2246
+ userId: user.id,
2247
+ realm: name
2248
+ });
2061
2249
  throw new InvalidCredentialsError();
2062
2250
  }
2063
2251
  const identity = await identities.getOne({ where: {
@@ -2089,6 +2277,21 @@ var SessionService = class {
2089
2277
  username
2090
2278
  }
2091
2279
  });
2280
+ if (ipKey) {
2281
+ if (await this.recordFailedLogin(ipKey, loginRateLimit.ipMaxAttempts, loginRateLimit.windowMs)) await this.userAudits(userRealmName)?.record("security", "rate_limited", {
2282
+ userRealm: name,
2283
+ success: false,
2284
+ description: "IP temporarily locked due to too many failed login attempts",
2285
+ metadata: { ip: request?.ip }
2286
+ });
2287
+ }
2288
+ if (await this.recordFailedLogin(accountKey, loginRateLimit.accountMaxAttempts, loginRateLimit.windowMs)) await this.userAudits(userRealmName)?.record("security", "rate_limited", {
2289
+ userRealm: name,
2290
+ resourceId: user.id,
2291
+ success: false,
2292
+ description: "Account temporarily locked due to too many failed login attempts",
2293
+ metadata: { userId: user.id }
2294
+ });
2092
2295
  throw new InvalidCredentialsError();
2093
2296
  }
2094
2297
  await this.userAudits(userRealmName)?.recordAuth("login", {
@@ -2247,9 +2450,20 @@ var SessionService = class {
2247
2450
  await this.ensureAdminRole(existing, userRealmName);
2248
2451
  return existing;
2249
2452
  }
2453
+ const realmSettings = await realm.getSettings();
2454
+ const adminEmails = realmSettings?.adminEmails ?? [];
2455
+ const isAdmin = profile.email && adminEmails.includes(profile.email);
2456
+ if (realmSettings?.registrationAllowed === false && !isAdmin) {
2457
+ this.log.warn("Registration not allowed for realm via OAuth2", {
2458
+ provider,
2459
+ userRealmName
2460
+ });
2461
+ throw new BadRequestError("Account doesn't exist");
2462
+ }
2463
+ const username = await this.generateUniqueUsername(profile, realmSettings, users);
2250
2464
  const user = await users.create({
2251
2465
  realm: realm.name,
2252
- username: profile.email.split("@")[0],
2466
+ username,
2253
2467
  email: profile.email,
2254
2468
  emailVerified: true,
2255
2469
  roles: ["user"]
@@ -2311,90 +2525,6 @@ var SessionService = class {
2311
2525
  }
2312
2526
  };
2313
2527
  //#endregion
2314
- //#region ../../src/api/users/buckets/UserBuckets.ts
2315
- /**
2316
- * User-specific file storage wrapper service.
2317
- *
2318
- * This service provides file storage for user-related files such as:
2319
- * - User avatars/profile pictures
2320
- *
2321
- * It is lazy-loaded when the `avatars` feature is enabled in the realm.
2322
- */
2323
- var UserBuckets = class {
2324
- /**
2325
- * Bucket for user avatar storage.
2326
- */
2327
- avatars = $bucket({
2328
- maxSize: 5 * 1024 * 1024,
2329
- mimeTypes: [
2330
- "image/jpeg",
2331
- "image/png",
2332
- "image/gif",
2333
- "image/webp"
2334
- ]
2335
- });
2336
- };
2337
- //#endregion
2338
- //#region ../../src/api/users/jobs/UserJobs.ts
2339
- /**
2340
- * User-specific jobs wrapper service.
2341
- *
2342
- * This service handles user-related scheduled jobs such as:
2343
- * - Session purge (cleaning up expired sessions)
2344
- * - Verification code cleanup
2345
- * - Inactive user notifications
2346
- *
2347
- * It is lazy-loaded when the `sessionPurge` feature is enabled in the realm.
2348
- */
2349
- var UserJobs = class {
2350
- log = $logger();
2351
- dateTimeProvider = $inject(DateTimeProvider);
2352
- sessionRepository = $repository(sessions);
2353
- /**
2354
- * Purge expired sessions from the database.
2355
- *
2356
- * This job runs daily at 3:00 AM and removes all sessions
2357
- * where the `expiresAt` timestamp has passed.
2358
- */
2359
- purgeExpiredSessions = $job({
2360
- cron: "0 0 * * *",
2361
- handler: async () => {
2362
- const now = this.dateTimeProvider.nowISOString();
2363
- this.log.info("Starting expired sessions purge", { cutoffTime: now });
2364
- const expiredSessions = await this.sessionRepository.findMany({ where: { expiresAt: { lt: now } } });
2365
- if (expiredSessions.length === 0) {
2366
- this.log.info("No expired sessions found");
2367
- return;
2368
- }
2369
- this.log.info("Found expired sessions", { count: expiredSessions.length });
2370
- const deletedIds = await this.sessionRepository.deleteMany({ expiresAt: { lt: now } });
2371
- this.log.info("Expired sessions purged successfully", { deletedCount: deletedIds.length });
2372
- }
2373
- });
2374
- };
2375
- //#endregion
2376
- //#region ../../src/api/users/parameters/UserParameters.ts
2377
- /**
2378
- * User-specific parameter service.
2379
- *
2380
- * This service wraps the core ParameterProvider to provide realm settings management.
2381
- * It is lazy-loaded when the `parameters` feature is enabled in the realm.
2382
- */
2383
- var UserParameters = class {
2384
- /**
2385
- * Realm authentication settings parameter.
2386
- *
2387
- * Controls user registration, login methods, verification requirements,
2388
- * and password policies for the realm.
2389
- */
2390
- realmSettings = $parameter({
2391
- name: "api.users.realmSettings",
2392
- description: "Realm authentication and registration settings",
2393
- schema: realmAuthSettingsAtom.schema,
2394
- default: realmAuthSettingsAtom.options.default
2395
- });
2396
- };
2397
- //#endregion
2398
2528
  //#region ../../src/api/users/primitives/$realm.ts
2399
2529
  /**
2400
2530
  * Already configured realm for user management.
@@ -2417,7 +2547,7 @@ const $realm = (options = {}) => {
2417
2547
  const name = options.issuer?.name ?? "default";
2418
2548
  options.settings ??= {};
2419
2549
  const features = {
2420
- sessionPurge: false,
2550
+ jobs: false,
2421
2551
  notifications: false,
2422
2552
  apiKeys: false,
2423
2553
  parameters: false,
@@ -2433,12 +2563,11 @@ const $realm = (options = {}) => {
2433
2563
  const realmRegistration = realmProvider.register(name, options);
2434
2564
  if (features.avatars) alepha.with(UserBuckets);
2435
2565
  if (features.audits) alepha.with(UserAudits);
2436
- if (features.sessionPurge) alepha.with(UserJobs);
2566
+ if (features.jobs) alepha.with(UserJobs);
2437
2567
  if (features.notifications) {
2438
2568
  alepha.with(UserNotifications);
2439
2569
  alepha.with(AlephaApiVerification);
2440
2570
  }
2441
- if (features.parameters) alepha.with(AlephaApiParameters);
2442
2571
  const customResolvers = [...options.issuer?.resolvers ?? []];
2443
2572
  if (features.apiKeys) {
2444
2573
  alepha.with(AlephaApiKeys);
@@ -2494,6 +2623,17 @@ const $realm = (options = {}) => {
2494
2623
  if (identities.github) auth.github = $authGithub(realm);
2495
2624
  alepha.with(() => auth);
2496
2625
  }
2626
+ if (features.parameters) {
2627
+ alepha.with(AlephaApiParameters);
2628
+ const settingsParam = $parameter({
2629
+ name: `api.realms.settings.${name}`,
2630
+ description: `Authentication and registration settings for realm "${name}"`,
2631
+ schema: realmAuthSettingsAtom.schema,
2632
+ default: realmRegistration.settings
2633
+ });
2634
+ realmRegistration.settingsParameter = settingsParam;
2635
+ alepha.with(() => ({ [`realmSettings_${name}`]: settingsParam }));
2636
+ }
2497
2637
  return realm;
2498
2638
  };
2499
2639
  //#endregion
@@ -2570,7 +2710,6 @@ const resetPasswordSchema = t.object({
2570
2710
  const AlephaApiUsers = $module({
2571
2711
  name: "alepha.api.users",
2572
2712
  services: [
2573
- AlephaEmail,
2574
2713
  RealmProvider,
2575
2714
  SessionService,
2576
2715
  SessionCrudService,
@@ -2582,10 +2721,17 @@ const AlephaApiUsers = $module({
2582
2721
  AdminUserController,
2583
2722
  AdminSessionController,
2584
2723
  AdminIdentityController,
2585
- RealmController
2586
- ]
2724
+ RealmController,
2725
+ UserJobs,
2726
+ UserNotifications,
2727
+ UserAudits,
2728
+ UserBuckets
2729
+ ],
2730
+ register: (alepha) => {
2731
+ alepha.with(RealmProvider).with(SessionService).with(SessionCrudService).with(CredentialService).with(RegistrationService).with(UserService).with(IdentityService).with(UserController).with(AdminUserController).with(AdminSessionController).with(AdminIdentityController).with(RealmController);
2732
+ }
2587
2733
  });
2588
2734
  //#endregion
2589
- export { $realm, AdminIdentityController, AdminSessionController, AdminUserController, AlephaApiUsers, CredentialService, DEFAULT_USER_REALM_NAME, IdentityService, RealmController, RealmProvider, RegistrationService, SessionCrudService, SessionService, UserAudits, UserBuckets, UserController, UserJobs, UserNotifications, UserParameters, UserService, completePasswordResetRequestSchema, completeRegistrationRequestSchema, createUserSchema, identities, identityQuerySchema, identityResourceSchema, loginSchema, passwordResetIntentResponseSchema, realmAuthSettingsAtom, realmConfigSchema, registerSchema, registrationIntentResponseSchema, resetPasswordRequestSchema, resetPasswordSchema, sessionQuerySchema, sessionResourceSchema, sessions, updateUserSchema, userQuerySchema, userResourceSchema, users };
2735
+ export { $realm, AdminIdentityController, AdminSessionController, AdminUserController, AlephaApiUsers, CredentialService, DEFAULT_USER_REALM_NAME, IdentityService, RealmController, RealmProvider, RegistrationService, SessionCrudService, SessionService, UserAudits, UserBuckets, UserController, UserJobs, UserNotifications, UserService, completePasswordResetRequestSchema, completeRegistrationRequestSchema, createUserSchema, identities, identityQuerySchema, identityResourceSchema, loginSchema, passwordResetIntentResponseSchema, realmAuthSettingsAtom, realmConfigSchema, registerSchema, registrationIntentResponseSchema, resetPasswordRequestSchema, resetPasswordSchema, sessionQuerySchema, sessionResourceSchema, sessions, updateUserSchema, userQuerySchema, userResourceSchema, users };
2590
2736
 
2591
2737
  //# sourceMappingURL=index.js.map