alepha 0.13.6 → 0.13.8

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 (487) hide show
  1. package/README.md +5 -2
  2. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  3. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  4. package/assets/swagger-ui/swagger-ui.css +1 -1
  5. package/dist/api/audits/index.browser.js +116 -0
  6. package/dist/api/audits/index.browser.js.map +1 -0
  7. package/dist/api/audits/index.d.ts +1194 -0
  8. package/dist/api/audits/index.js +674 -0
  9. package/dist/api/audits/index.js.map +1 -0
  10. package/dist/{api-files → api/files}/index.browser.js +5 -5
  11. package/dist/api/files/index.browser.js.map +1 -0
  12. package/dist/{api-files → api/files}/index.d.ts +16 -9
  13. package/dist/{api-files → api/files}/index.js +10 -10
  14. package/dist/api/files/index.js.map +1 -0
  15. package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
  16. package/dist/api/jobs/index.browser.js.map +1 -0
  17. package/dist/{api-jobs → api/jobs}/index.d.ts +35 -35
  18. package/dist/{api-jobs → api/jobs}/index.js +9 -9
  19. package/dist/api/jobs/index.js.map +1 -0
  20. package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
  21. package/dist/api/notifications/index.browser.js.map +1 -0
  22. package/dist/api/notifications/index.d.ts +327 -0
  23. package/dist/{api-notifications → api/notifications}/index.js +11 -11
  24. package/dist/api/notifications/index.js.map +1 -0
  25. package/dist/api/parameters/index.browser.js +60 -0
  26. package/dist/api/parameters/index.browser.js.map +1 -0
  27. package/dist/api/parameters/index.d.ts +761 -0
  28. package/dist/api/parameters/index.js +877 -0
  29. package/dist/api/parameters/index.js.map +1 -0
  30. package/dist/{api-users → api/users}/index.browser.js +6 -6
  31. package/dist/api/users/index.browser.js.map +1 -0
  32. package/dist/{api-users → api/users}/index.d.ts +259 -247
  33. package/dist/{api-users → api/users}/index.js +125 -112
  34. package/dist/api/users/index.js.map +1 -0
  35. package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
  36. package/dist/api/verifications/index.browser.js.map +1 -0
  37. package/dist/api/verifications/index.d.ts +248 -0
  38. package/dist/{api-verifications → api/verifications}/index.js +13 -12
  39. package/dist/api/verifications/index.js.map +1 -0
  40. package/dist/bin/index.js +1 -0
  41. package/dist/bin/index.js.map +1 -1
  42. package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
  43. package/dist/cache/{index.js → core/index.js} +5 -5
  44. package/dist/cache/core/index.js.map +1 -0
  45. package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
  46. package/dist/{cache-redis → cache/redis}/index.js +2 -2
  47. package/dist/cache/redis/index.js.map +1 -0
  48. package/dist/cli/index.d.ts +71 -9
  49. package/dist/cli/index.js +280 -79
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/command/index.d.ts +63 -2
  52. package/dist/command/index.js +30 -3
  53. package/dist/command/index.js.map +1 -1
  54. package/dist/core/index.browser.js +241 -61
  55. package/dist/core/index.browser.js.map +1 -1
  56. package/dist/core/index.d.ts +170 -90
  57. package/dist/core/index.js +264 -67
  58. package/dist/core/index.js.map +1 -1
  59. package/dist/core/index.native.js +248 -65
  60. package/dist/core/index.native.js.map +1 -1
  61. package/dist/email/index.js +15 -10554
  62. package/dist/email/index.js.map +1 -1
  63. package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
  64. package/dist/lock/{index.js → core/index.js} +5 -5
  65. package/dist/lock/core/index.js.map +1 -0
  66. package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
  67. package/dist/{lock-redis → lock/redis}/index.js +2 -2
  68. package/dist/lock/redis/index.js.map +1 -0
  69. package/dist/logger/index.d.ts +4 -4
  70. package/dist/logger/index.js +77 -72
  71. package/dist/logger/index.js.map +1 -1
  72. package/dist/orm/index.d.ts +5 -1
  73. package/dist/orm/index.js +24 -7
  74. package/dist/orm/index.js.map +1 -1
  75. package/dist/queue/core/index.d.ts +548 -0
  76. package/dist/queue/core/index.js +391 -0
  77. package/dist/queue/core/index.js.map +1 -0
  78. package/dist/queue/redis/index.d.ts +28 -0
  79. package/dist/queue/redis/index.js +43 -0
  80. package/dist/queue/redis/index.js.map +1 -0
  81. package/dist/scheduler/index.d.ts +7 -7
  82. package/dist/scheduler/index.js +1 -393
  83. package/dist/scheduler/index.js.map +1 -1
  84. package/dist/security/index.d.ts +1 -1
  85. package/dist/security/index.js +2 -1413
  86. package/dist/security/index.js.map +1 -1
  87. package/dist/{server-auth → server/auth}/index.browser.js +6 -6
  88. package/dist/server/auth/index.browser.js.map +1 -0
  89. package/dist/{server-auth → server/auth}/index.d.ts +175 -164
  90. package/dist/server/auth/index.js +742 -0
  91. package/dist/server/auth/index.js.map +1 -0
  92. package/dist/{server-cache → server/cache}/index.d.ts +2 -2
  93. package/dist/{server-cache → server/cache}/index.js +2 -2
  94. package/dist/server/cache/index.js.map +1 -0
  95. package/dist/{server-compress → server/compress}/index.d.ts +2 -2
  96. package/dist/{server-compress → server/compress}/index.js +2 -2
  97. package/dist/server/compress/index.js.map +1 -0
  98. package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
  99. package/dist/server/cookies/index.browser.js.map +1 -0
  100. package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
  101. package/dist/{server-cookies → server/cookies}/index.js +9 -5
  102. package/dist/server/cookies/index.js.map +1 -0
  103. package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
  104. package/dist/server/core/index.browser.js.map +1 -0
  105. package/dist/server/{index.d.ts → core/index.d.ts} +46 -37
  106. package/dist/server/{index.js → core/index.js} +47 -33
  107. package/dist/server/core/index.js.map +1 -0
  108. package/dist/{server-cors → server/cors}/index.d.ts +3 -3
  109. package/dist/{server-cors → server/cors}/index.js +3 -3
  110. package/dist/server/cors/index.js.map +1 -0
  111. package/dist/{server-health → server/health}/index.d.ts +3 -3
  112. package/dist/{server-health → server/health}/index.js +3 -3
  113. package/dist/server/health/index.js.map +1 -0
  114. package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
  115. package/dist/{server-helmet → server/helmet}/index.js +2 -2
  116. package/dist/server/helmet/index.js.map +1 -0
  117. package/dist/{server-links → server/links}/index.browser.js +5 -5
  118. package/dist/server/links/index.browser.js.map +1 -0
  119. package/dist/{server-links → server/links}/index.d.ts +40 -40
  120. package/dist/{server-links → server/links}/index.js +7 -7
  121. package/dist/server/links/index.js.map +1 -0
  122. package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
  123. package/dist/server/metrics/index.js +74 -0
  124. package/dist/server/metrics/index.js.map +1 -0
  125. package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
  126. package/dist/{server-multipart → server/multipart}/index.js +2 -2
  127. package/dist/server/multipart/index.js.map +1 -0
  128. package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
  129. package/dist/{server-proxy → server/proxy}/index.js +3 -3
  130. package/dist/server/proxy/index.js.map +1 -0
  131. package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
  132. package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
  133. package/dist/server/rate-limit/index.js.map +1 -0
  134. package/dist/{server-security → server/security}/index.browser.js +1 -1
  135. package/dist/server/security/index.browser.js.map +1 -0
  136. package/dist/{server-security → server/security}/index.d.ts +4 -4
  137. package/dist/{server-security → server/security}/index.js +4 -4
  138. package/dist/server/security/index.js.map +1 -0
  139. package/dist/{server-static → server/static}/index.d.ts +3 -3
  140. package/dist/{server-static → server/static}/index.js +3 -3
  141. package/dist/server/static/index.js.map +1 -0
  142. package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
  143. package/dist/{server-swagger → server/swagger}/index.js +4 -4
  144. package/dist/server/swagger/index.js.map +1 -0
  145. package/dist/thread/index.js +2 -2
  146. package/dist/thread/index.js.map +1 -1
  147. package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
  148. package/dist/topic/{index.js → core/index.js} +6 -6
  149. package/dist/topic/core/index.js.map +1 -0
  150. package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
  151. package/dist/{topic-redis → topic/redis}/index.js +2 -2
  152. package/dist/topic/redis/index.js.map +1 -0
  153. package/dist/vite/index.d.ts +13 -2
  154. package/dist/vite/index.js +114 -50
  155. package/dist/vite/index.js.map +1 -1
  156. package/dist/websocket/index.browser.js +3 -3
  157. package/dist/websocket/index.browser.js.map +1 -1
  158. package/dist/websocket/index.js +4 -4
  159. package/dist/websocket/index.js.map +1 -1
  160. package/package.json +160 -156
  161. package/src/api/audits/controllers/AuditController.ts +186 -0
  162. package/src/api/audits/entities/audits.ts +132 -0
  163. package/src/api/audits/index.browser.ts +18 -0
  164. package/src/api/audits/index.ts +58 -0
  165. package/src/api/audits/primitives/$audit.ts +159 -0
  166. package/src/api/audits/schemas/auditQuerySchema.ts +23 -0
  167. package/src/api/audits/schemas/auditResourceSchema.ts +9 -0
  168. package/src/api/audits/schemas/createAuditSchema.ts +27 -0
  169. package/src/api/audits/services/AuditService.ts +412 -0
  170. package/src/{api-files → api/files}/index.ts +1 -0
  171. package/src/api/parameters/controllers/ConfigController.ts +324 -0
  172. package/src/api/parameters/entities/parameters.ts +113 -0
  173. package/src/api/parameters/index.ts +60 -0
  174. package/src/api/parameters/primitives/$config.ts +351 -0
  175. package/src/api/parameters/schedulers/ConfigActivationScheduler.ts +30 -0
  176. package/src/api/parameters/services/ConfigStore.ts +491 -0
  177. package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +19 -0
  178. package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -2
  179. package/src/{api-users → api/users}/index.ts +2 -0
  180. package/src/{api-users → api/users}/primitives/$userRealm.ts +18 -3
  181. package/src/{api-users → api/users}/providers/UserRealmProvider.ts +12 -10
  182. package/src/{api-users → api/users}/services/RegistrationService.ts +2 -1
  183. package/src/{api-users → api/users}/services/SessionService.ts +4 -0
  184. package/src/{api-users → api/users}/services/UserService.ts +3 -0
  185. package/src/{api-verifications → api/verifications}/index.ts +9 -1
  186. package/src/bin/index.ts +1 -0
  187. package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
  188. package/src/cli/assets/appRouterTs.ts +1 -1
  189. package/src/cli/assets/biomeJson.ts +2 -2
  190. package/src/cli/assets/dummySpecTs.ts +7 -0
  191. package/src/cli/assets/editorconfig.ts +13 -0
  192. package/src/cli/assets/indexHtml.ts +1 -1
  193. package/src/cli/assets/mainBrowserTs.ts +1 -1
  194. package/src/cli/assets/mainTs.ts +14 -0
  195. package/src/cli/assets/viteConfigTs.ts +1 -1
  196. package/src/cli/commands/BiomeCommands.ts +2 -0
  197. package/src/cli/commands/CoreCommands.ts +38 -15
  198. package/src/cli/commands/VerifyCommands.ts +6 -2
  199. package/src/cli/commands/ViteCommands.ts +28 -18
  200. package/src/cli/services/AlephaCliUtils.ts +243 -37
  201. package/src/command/helpers/Asker.ts +0 -1
  202. package/src/command/primitives/$command.ts +67 -0
  203. package/src/command/providers/CliProvider.ts +39 -8
  204. package/src/core/Alepha.ts +40 -30
  205. package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
  206. package/src/core/index.shared.ts +1 -0
  207. package/src/core/index.ts +30 -3
  208. package/src/core/providers/EventManager.ts +1 -1
  209. package/src/core/providers/SchemaValidator.ts +1 -1
  210. package/src/core/providers/StateManager.ts +23 -12
  211. package/src/core/providers/TypeProvider.ts +26 -34
  212. package/src/logger/index.ts +8 -6
  213. package/src/logger/primitives/$logger.ts +1 -1
  214. package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
  215. package/src/orm/index.ts +6 -0
  216. package/src/orm/services/PgRelationManager.ts +2 -2
  217. package/src/orm/services/PostgresModelBuilder.ts +11 -7
  218. package/src/orm/services/Repository.ts +16 -7
  219. package/src/orm/services/SqliteModelBuilder.ts +10 -0
  220. package/src/queue/{index.ts → core/index.ts} +2 -3
  221. package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
  222. package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
  223. package/src/queue/core/providers/QueueProvider.ts +23 -0
  224. package/src/queue/core/providers/WorkerProvider.ts +244 -0
  225. package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
  226. package/src/{server-auth → server/auth}/primitives/$auth.ts +7 -0
  227. package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +51 -8
  228. package/src/{server-cookies → server/cookies}/index.ts +2 -1
  229. package/src/server/{index.ts → core/index.ts} +7 -0
  230. package/src/server/{primitives → core/primitives}/$action.ts +10 -1
  231. package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +11 -5
  232. package/src/server/{providers → core/providers}/ServerRouterProvider.ts +13 -7
  233. package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
  234. package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
  235. package/src/thread/primitives/$thread.ts +2 -2
  236. package/src/vite/index.ts +0 -2
  237. package/src/vite/tasks/buildServer.ts +3 -4
  238. package/src/vite/tasks/copyAssets.ts +32 -8
  239. package/src/vite/tasks/generateCloudflare.ts +35 -19
  240. package/src/vite/tasks/generateDocker.ts +18 -4
  241. package/src/vite/tasks/generateSitemap.ts +5 -7
  242. package/src/vite/tasks/generateVercel.ts +76 -41
  243. package/src/vite/tasks/runAlepha.ts +16 -1
  244. package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
  245. package/src/websocket/services/WebSocketClient.ts +3 -3
  246. package/dist/api-files/index.browser.js.map +0 -1
  247. package/dist/api-files/index.js.map +0 -1
  248. package/dist/api-jobs/index.browser.js.map +0 -1
  249. package/dist/api-jobs/index.js.map +0 -1
  250. package/dist/api-notifications/index.browser.js.map +0 -1
  251. package/dist/api-notifications/index.d.ts +0 -327
  252. package/dist/api-notifications/index.js.map +0 -1
  253. package/dist/api-parameters/index.browser.js +0 -29
  254. package/dist/api-parameters/index.browser.js.map +0 -1
  255. package/dist/api-parameters/index.d.ts +0 -83
  256. package/dist/api-parameters/index.js +0 -63
  257. package/dist/api-parameters/index.js.map +0 -1
  258. package/dist/api-users/index.browser.js.map +0 -1
  259. package/dist/api-users/index.js.map +0 -1
  260. package/dist/api-verifications/index.browser.js.map +0 -1
  261. package/dist/api-verifications/index.d.ts +0 -229
  262. package/dist/api-verifications/index.js.map +0 -1
  263. package/dist/cache/index.js.map +0 -1
  264. package/dist/cache-redis/index.js.map +0 -1
  265. package/dist/cli/dist-BlfFtOk2.js +0 -2770
  266. package/dist/cli/dist-BlfFtOk2.js.map +0 -1
  267. package/dist/lock/index.js.map +0 -1
  268. package/dist/lock-redis/index.js.map +0 -1
  269. package/dist/queue/index.d.ts +0 -1265
  270. package/dist/queue/index.js +0 -1037
  271. package/dist/queue/index.js.map +0 -1
  272. package/dist/queue-redis/index.d.ts +0 -82
  273. package/dist/queue-redis/index.js +0 -872
  274. package/dist/queue-redis/index.js.map +0 -1
  275. package/dist/server/index.browser.js.map +0 -1
  276. package/dist/server/index.js.map +0 -1
  277. package/dist/server-auth/index.browser.js.map +0 -1
  278. package/dist/server-auth/index.js +0 -1943
  279. package/dist/server-auth/index.js.map +0 -1
  280. package/dist/server-cache/index.js.map +0 -1
  281. package/dist/server-compress/index.js.map +0 -1
  282. package/dist/server-cookies/index.browser.js.map +0 -1
  283. package/dist/server-cookies/index.js.map +0 -1
  284. package/dist/server-cors/index.js.map +0 -1
  285. package/dist/server-health/index.js.map +0 -1
  286. package/dist/server-helmet/index.js.map +0 -1
  287. package/dist/server-links/index.browser.js.map +0 -1
  288. package/dist/server-links/index.js.map +0 -1
  289. package/dist/server-metrics/index.js +0 -4532
  290. package/dist/server-metrics/index.js.map +0 -1
  291. package/dist/server-multipart/index.js.map +0 -1
  292. package/dist/server-proxy/index.js.map +0 -1
  293. package/dist/server-rate-limit/index.js.map +0 -1
  294. package/dist/server-security/index.browser.js.map +0 -1
  295. package/dist/server-security/index.js.map +0 -1
  296. package/dist/server-static/index.js.map +0 -1
  297. package/dist/server-swagger/index.js.map +0 -1
  298. package/dist/topic/index.js.map +0 -1
  299. package/dist/topic-redis/index.js.map +0 -1
  300. package/src/api-parameters/controllers/ParameterController.ts +0 -45
  301. package/src/api-parameters/entities/parameters.ts +0 -30
  302. package/src/api-parameters/index.ts +0 -21
  303. package/src/api-parameters/primitives/$config.ts +0 -79
  304. package/src/api-parameters/services/ParameterStore.ts +0 -23
  305. package/src/queue/interfaces/QueueJob.ts +0 -459
  306. package/src/queue/providers/MemoryQueueProvider.ts +0 -850
  307. package/src/queue/providers/QueueProvider.ts +0 -319
  308. package/src/queue/providers/WorkerProvider.ts +0 -344
  309. package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
  310. /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
  311. /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
  312. /package/src/{api-files → api/files}/entities/files.ts +0 -0
  313. /package/src/{api-files → api/files}/index.browser.ts +0 -0
  314. /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
  315. /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
  316. /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
  317. /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
  318. /package/src/{api-files → api/files}/services/FileService.ts +0 -0
  319. /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
  320. /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
  321. /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
  322. /package/src/{api-jobs → api/jobs}/index.ts +0 -0
  323. /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
  324. /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
  325. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
  326. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
  327. /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
  328. /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
  329. /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
  330. /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
  331. /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
  332. /package/src/{api-notifications → api/notifications}/index.ts +0 -0
  333. /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
  334. /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
  335. /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
  336. /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
  337. /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
  338. /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
  339. /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
  340. /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
  341. /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
  342. /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
  343. /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
  344. /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
  345. /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
  346. /package/src/{api-users → api/users}/entities/identities.ts +0 -0
  347. /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
  348. /package/src/{api-users → api/users}/entities/users.ts +0 -0
  349. /package/src/{api-users → api/users}/index.browser.ts +0 -0
  350. /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
  351. /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
  352. /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
  353. /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
  354. /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
  355. /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
  356. /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
  357. /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
  358. /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
  359. /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
  360. /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
  361. /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
  362. /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
  363. /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
  364. /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
  365. /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
  366. /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
  367. /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
  368. /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
  369. /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
  370. /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
  371. /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
  372. /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
  373. /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
  374. /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
  375. /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
  376. /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
  377. /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
  378. /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
  379. /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
  380. /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
  381. /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
  382. /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
  383. /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
  384. /package/src/cache/{index.ts → core/index.ts} +0 -0
  385. /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
  386. /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
  387. /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
  388. /package/src/{cache-redis → cache/redis}/index.ts +0 -0
  389. /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
  390. /package/src/lock/{index.ts → core/index.ts} +0 -0
  391. /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
  392. /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
  393. /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
  394. /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
  395. /package/src/{lock-redis → lock/redis}/index.ts +0 -0
  396. /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
  397. /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
  398. /package/src/{queue-redis → queue/redis}/index.ts +0 -0
  399. /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
  400. /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
  401. /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
  402. /package/src/{server-auth → server/auth}/index.ts +0 -0
  403. /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
  404. /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
  405. /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
  406. /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
  407. /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
  408. /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
  409. /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
  410. /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
  411. /package/src/{server-cache → server/cache}/index.ts +0 -0
  412. /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
  413. /package/src/{server-compress → server/compress}/index.ts +0 -0
  414. /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
  415. /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
  416. /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
  417. /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
  418. /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
  419. /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
  420. /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
  421. /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
  422. /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
  423. /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
  424. /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
  425. /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
  426. /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
  427. /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
  428. /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
  429. /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
  430. /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
  431. /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
  432. /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
  433. /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
  434. /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
  435. /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
  436. /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
  437. /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
  438. /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
  439. /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
  440. /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
  441. /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
  442. /package/src/server/{services → core/services}/HttpClient.ts +0 -0
  443. /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
  444. /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
  445. /package/src/{server-cors → server/cors}/index.ts +0 -0
  446. /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
  447. /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
  448. /package/src/{server-health → server/health}/index.ts +0 -0
  449. /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
  450. /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
  451. /package/src/{server-helmet → server/helmet}/index.ts +0 -0
  452. /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
  453. /package/src/{server-links → server/links}/index.browser.ts +0 -0
  454. /package/src/{server-links → server/links}/index.ts +0 -0
  455. /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
  456. /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
  457. /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
  458. /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
  459. /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
  460. /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
  461. /package/src/{server-metrics → server/metrics}/index.ts +0 -0
  462. /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
  463. /package/src/{server-multipart → server/multipart}/index.ts +0 -0
  464. /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
  465. /package/src/{server-proxy → server/proxy}/index.ts +0 -0
  466. /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
  467. /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
  468. /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
  469. /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
  470. /package/src/{server-security → server/security}/index.browser.ts +0 -0
  471. /package/src/{server-security → server/security}/index.ts +0 -0
  472. /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
  473. /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
  474. /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
  475. /package/src/{server-static → server/static}/index.ts +0 -0
  476. /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
  477. /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
  478. /package/src/{server-swagger → server/swagger}/index.ts +0 -0
  479. /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
  480. /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
  481. /package/src/topic/{index.ts → core/index.ts} +0 -0
  482. /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
  483. /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
  484. /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
  485. /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
  486. /package/src/{topic-redis → topic/redis}/index.ts +0 -0
  487. /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
@@ -0,0 +1,324 @@
1
+ import { $inject, t } from "alepha";
2
+ import { $action } from "alepha/server";
3
+ import type { ParameterStatus } from "../entities/parameters.ts";
4
+ import { ConfigStore } from "../services/ConfigStore.ts";
5
+
6
+ // Define response schemas inline to avoid complex entity schema issues
7
+ const parameterResponseSchema = t.object({
8
+ id: t.uuid(),
9
+ createdAt: t.datetime(),
10
+ updatedAt: t.datetime(),
11
+ name: t.text(),
12
+ content: t.json(),
13
+ schemaHash: t.text(),
14
+ status: t.enum(["expired", "current", "next", "future"]),
15
+ activationDate: t.datetime(),
16
+ expiredAt: t.optional(t.datetime()),
17
+ version: t.integer(),
18
+ changeDescription: t.optional(t.text()),
19
+ tags: t.optional(t.array(t.text())),
20
+ creatorId: t.optional(t.uuid()),
21
+ creatorName: t.optional(t.text()),
22
+ previousContent: t.optional(t.json()),
23
+ migrationLog: t.optional(t.text()),
24
+ });
25
+
26
+ const treeNodeSchema: any = t.object({
27
+ name: t.text(),
28
+ path: t.text(),
29
+ isLeaf: t.boolean(),
30
+ children: t.array(t.any()),
31
+ });
32
+
33
+ /**
34
+ * REST API controller for versioned configuration management.
35
+ *
36
+ * Provides endpoints for:
37
+ * - Listing all configurations (tree view support)
38
+ * - Getting configuration history (all versions)
39
+ * - Getting current/next configuration values
40
+ * - Creating new configuration versions (immediate or scheduled)
41
+ * - Rolling back to previous versions
42
+ * - Activating scheduled versions immediately
43
+ */
44
+ export class ConfigController {
45
+ protected readonly store = $inject(ConfigStore);
46
+
47
+ /**
48
+ * Get tree structure of all configuration names.
49
+ * Useful for admin UI navigation.
50
+ */
51
+ getConfigTree = $action({
52
+ description:
53
+ "Get tree structure of all configuration names for navigation.",
54
+ path: "/configs/tree",
55
+ method: "GET",
56
+ schema: {
57
+ response: t.array(treeNodeSchema),
58
+ },
59
+ handler: async () => {
60
+ return this.store.getConfigTree();
61
+ },
62
+ });
63
+
64
+ /**
65
+ * List all unique configuration names.
66
+ */
67
+ listConfigNames = $action({
68
+ description: "List all unique configuration names.",
69
+ path: "/configs",
70
+ method: "GET",
71
+ schema: {
72
+ response: t.object({
73
+ names: t.array(t.text()),
74
+ }),
75
+ },
76
+ handler: async () => {
77
+ const names = await this.store.getConfigNames();
78
+ return { names };
79
+ },
80
+ });
81
+
82
+ /**
83
+ * Get configurations by status.
84
+ */
85
+ getByStatus = $action({
86
+ description: "Get all configurations with a specific status.",
87
+ path: "/configs/status/:status",
88
+ method: "GET",
89
+ schema: {
90
+ params: t.object({
91
+ status: t.enum(["expired", "current", "next", "future"]),
92
+ }),
93
+ response: t.object({
94
+ configs: t.array(parameterResponseSchema),
95
+ }),
96
+ },
97
+ handler: async ({ params }) => {
98
+ const configs = await this.store.getByStatus(
99
+ params.status as ParameterStatus,
100
+ );
101
+ return { configs };
102
+ },
103
+ });
104
+
105
+ /**
106
+ * Get version history for a specific configuration.
107
+ */
108
+ getHistory = $action({
109
+ description: "Get all versions of a specific configuration.",
110
+ path: "/configs/:name/history",
111
+ method: "GET",
112
+ schema: {
113
+ params: t.object({
114
+ name: t.text({
115
+ description: "Configuration name (e.g., app.features.flags)",
116
+ }),
117
+ }),
118
+ response: t.object({
119
+ versions: t.array(parameterResponseSchema),
120
+ }),
121
+ },
122
+ handler: async ({ params }) => {
123
+ const versions = await this.store.getHistory(params.name);
124
+ return { versions };
125
+ },
126
+ });
127
+
128
+ /**
129
+ * Get current and next values for a configuration.
130
+ * Includes defaultValue and currentValue from the registered primitive
131
+ * even if no versions exist in the database yet.
132
+ */
133
+ getCurrent = $action({
134
+ description: "Get current and next scheduled values for a configuration.",
135
+ path: "/configs/:name",
136
+ method: "GET",
137
+ schema: {
138
+ params: t.object({
139
+ name: t.text({
140
+ description: "Configuration name (e.g., app.features.flags)",
141
+ }),
142
+ }),
143
+ response: t.object({
144
+ current: t.optional(parameterResponseSchema),
145
+ next: t.optional(parameterResponseSchema),
146
+ defaultValue: t.optional(t.json()),
147
+ currentValue: t.optional(t.json()),
148
+ schema: t.optional(t.json()),
149
+ }),
150
+ },
151
+ handler: async ({ params }) => {
152
+ const result = await this.store.getCurrentWithDefault(params.name);
153
+ return {
154
+ current: result.current ?? undefined,
155
+ next: result.next ?? undefined,
156
+ defaultValue: result.defaultValue ?? undefined,
157
+ currentValue: result.currentValue ?? undefined,
158
+ schema: result.schema ?? undefined,
159
+ };
160
+ },
161
+ });
162
+
163
+ /**
164
+ * Get a specific version of a configuration.
165
+ */
166
+ getVersion = $action({
167
+ description: "Get a specific version of a configuration.",
168
+ path: "/configs/:name/versions/:version",
169
+ method: "GET",
170
+ schema: {
171
+ params: t.object({
172
+ name: t.text(),
173
+ version: t.integer(),
174
+ }),
175
+ response: t.object({
176
+ config: t.optional(parameterResponseSchema),
177
+ }),
178
+ },
179
+ handler: async ({ params }) => {
180
+ const config = await this.store.getVersion(params.name, params.version);
181
+ return { config: config ?? undefined };
182
+ },
183
+ });
184
+
185
+ /**
186
+ * Create a new configuration version.
187
+ */
188
+ createVersion = $action({
189
+ description:
190
+ "Create a new version of a configuration (immediate or scheduled).",
191
+ path: "/configs/:name",
192
+ method: "POST",
193
+ schema: {
194
+ params: t.object({
195
+ name: t.text({
196
+ description: "Configuration name (e.g., app.features.flags)",
197
+ }),
198
+ }),
199
+ body: t.object({
200
+ content: t.json({ description: "New configuration content" }),
201
+ schemaHash: t.text({
202
+ description: "Hash of the schema for migration detection",
203
+ }),
204
+ activationDate: t.optional(
205
+ t.datetime({ description: "When to activate (default: now)" }),
206
+ ),
207
+ changeDescription: t.optional(
208
+ t.text({ description: "Description of changes" }),
209
+ ),
210
+ tags: t.optional(t.array(t.text())),
211
+ creatorId: t.optional(t.uuid()),
212
+ creatorName: t.optional(t.text()),
213
+ }),
214
+ response: parameterResponseSchema,
215
+ },
216
+ handler: async ({ params, body }) => {
217
+ return this.store.save(params.name, body.content, body.schemaHash, {
218
+ activationDate: body.activationDate
219
+ ? new Date(body.activationDate)
220
+ : undefined,
221
+ changeDescription: body.changeDescription,
222
+ tags: body.tags,
223
+ creatorId: body.creatorId,
224
+ creatorName: body.creatorName,
225
+ });
226
+ },
227
+ });
228
+
229
+ /**
230
+ * Rollback to a previous version.
231
+ */
232
+ rollback = $action({
233
+ description:
234
+ "Rollback a configuration to a previous version (creates new version with old content).",
235
+ path: "/configs/:name/rollback",
236
+ method: "POST",
237
+ schema: {
238
+ params: t.object({
239
+ name: t.text(),
240
+ }),
241
+ body: t.object({
242
+ targetVersion: t.integer({
243
+ description: "Version number to rollback to",
244
+ }),
245
+ changeDescription: t.optional(t.text()),
246
+ creatorId: t.optional(t.uuid()),
247
+ creatorName: t.optional(t.text()),
248
+ }),
249
+ response: parameterResponseSchema,
250
+ },
251
+ handler: async ({ params, body }) => {
252
+ return this.store.rollback(params.name, body.targetVersion, {
253
+ changeDescription: body.changeDescription,
254
+ creatorId: body.creatorId,
255
+ creatorName: body.creatorName,
256
+ });
257
+ },
258
+ });
259
+
260
+ /**
261
+ * Activate a scheduled version immediately.
262
+ */
263
+ activateNow = $action({
264
+ description: "Activate a future/next configuration version immediately.",
265
+ path: "/configs/:name/activate",
266
+ method: "POST",
267
+ schema: {
268
+ params: t.object({
269
+ name: t.text(),
270
+ }),
271
+ body: t.object({
272
+ version: t.integer({ description: "Version number to activate" }),
273
+ creatorId: t.optional(t.uuid()),
274
+ creatorName: t.optional(t.text()),
275
+ }),
276
+ response: parameterResponseSchema,
277
+ },
278
+ handler: async ({ params, body }) => {
279
+ const target = await this.store.getVersion(params.name, body.version);
280
+ if (!target) {
281
+ throw new Error(
282
+ `Version ${body.version} not found for config ${params.name}`,
283
+ );
284
+ }
285
+
286
+ if (target.status === "current") {
287
+ return target; // Already current
288
+ }
289
+
290
+ if (target.status === "expired") {
291
+ throw new Error(
292
+ "Cannot activate an expired version. Use rollback instead.",
293
+ );
294
+ }
295
+
296
+ // Create new version with same content but immediate activation
297
+ return this.store.save(params.name, target.content, target.schemaHash, {
298
+ changeDescription: `Early activation of version ${body.version}`,
299
+ creatorId: body.creatorId,
300
+ creatorName: body.creatorName,
301
+ });
302
+ },
303
+ });
304
+
305
+ /**
306
+ * Trigger activation check for all scheduled configs.
307
+ * Normally called by a scheduler, but exposed for manual triggering.
308
+ */
309
+ checkScheduled = $action({
310
+ description:
311
+ "Manually trigger activation check for all scheduled configurations.",
312
+ path: "/configs/activate-scheduled",
313
+ method: "POST",
314
+ schema: {
315
+ response: t.object({
316
+ message: t.text(),
317
+ }),
318
+ },
319
+ handler: async () => {
320
+ await this.store.activateScheduledConfigs();
321
+ return { message: "Scheduled configuration activation check completed" };
322
+ },
323
+ });
324
+ }
@@ -0,0 +1,113 @@
1
+ import { type Static, t } from "alepha";
2
+ import { $entity, pg } from "alepha/orm";
3
+
4
+ /**
5
+ * Parameter status values.
6
+ *
7
+ * - EXPIRED: Past version, no longer active
8
+ * - CURRENT: Currently active version
9
+ * - NEXT: Scheduled to become active (closest future date)
10
+ * - FUTURE: Scheduled for activation after NEXT
11
+ */
12
+ export type ParameterStatus = "expired" | "current" | "next" | "future";
13
+
14
+ /**
15
+ * Configuration parameter entity for versioned configuration management.
16
+ *
17
+ * Stores all versions of configuration parameters with:
18
+ * - Automatic status management (expired, current, next, future)
19
+ * - Schema versioning for migrations
20
+ * - Activation scheduling
21
+ * - Audit trail (creator info)
22
+ */
23
+ export const parameters = $entity({
24
+ name: "parameters",
25
+ schema: t.object({
26
+ id: pg.primaryKey(t.uuid()),
27
+ createdAt: pg.createdAt(),
28
+ updatedAt: pg.updatedAt(),
29
+
30
+ /**
31
+ * Configuration name using dot notation for tree hierarchy.
32
+ * Examples: "app.features", "app.pricing.tiers", "system.limits"
33
+ */
34
+ name: t.text(),
35
+
36
+ /**
37
+ * The configuration content as JSON.
38
+ */
39
+ content: t.json(),
40
+
41
+ /**
42
+ * Schema version hash for detecting schema changes.
43
+ * Used for auto-migration when schema evolves.
44
+ */
45
+ schemaHash: t.text(),
46
+
47
+ /**
48
+ * Current status of this parameter version.
49
+ */
50
+ status: pg.default(
51
+ t.enum(["expired", "current", "next", "future"]),
52
+ "future",
53
+ ),
54
+
55
+ /**
56
+ * When this version should become active.
57
+ * Default is immediate (now).
58
+ */
59
+ activationDate: t.datetime(),
60
+
61
+ /**
62
+ * When this version was deactivated (became expired).
63
+ * Null if still active or scheduled.
64
+ */
65
+ expiredAt: t.optional(t.datetime()),
66
+
67
+ /**
68
+ * Version number for this configuration.
69
+ * Auto-incremented per config name.
70
+ */
71
+ version: t.integer(),
72
+
73
+ /**
74
+ * Optional description of changes in this version.
75
+ */
76
+ changeDescription: t.optional(t.text()),
77
+
78
+ /**
79
+ * Optional tags for filtering/categorization.
80
+ */
81
+ tags: t.optional(t.array(t.text())),
82
+
83
+ /**
84
+ * Creator user ID (if available).
85
+ */
86
+ creatorId: t.optional(t.uuid()),
87
+
88
+ /**
89
+ * Creator display name for audit trail.
90
+ */
91
+ creatorName: t.optional(t.text()),
92
+
93
+ /**
94
+ * Previous content before this change (for rollback reference).
95
+ */
96
+ previousContent: t.optional(t.json()),
97
+
98
+ /**
99
+ * Migration log if schema changed.
100
+ */
101
+ migrationLog: t.optional(t.text()),
102
+ }),
103
+ indexes: [
104
+ { columns: ["name", "status"] },
105
+ { columns: ["name", "activationDate"] },
106
+ { columns: ["name", "version"], unique: true },
107
+ { columns: ["status"] },
108
+ { columns: ["activationDate"] },
109
+ ],
110
+ });
111
+
112
+ export type Parameter = Static<typeof parameters.schema>;
113
+ export type ParameterInsert = Omit<Parameter, "id" | "createdAt" | "updatedAt">;
@@ -0,0 +1,60 @@
1
+ import { $module } from "alepha";
2
+ import { ConfigController } from "./controllers/ConfigController.ts";
3
+ import { ConfigActivationScheduler } from "./schedulers/ConfigActivationScheduler.ts";
4
+ import { ConfigStore } from "./services/ConfigStore.ts";
5
+
6
+ // ---------------------------------------------------------------------------------------------------------------------
7
+
8
+ // Controller exports
9
+ export * from "./controllers/ConfigController.ts";
10
+ // Entity exports
11
+ export * from "./entities/parameters.ts";
12
+ // Primitive exports
13
+ export * from "./primitives/$config.ts";
14
+ // Scheduler exports
15
+ export * from "./schedulers/ConfigActivationScheduler.ts";
16
+ // Service exports
17
+ export * from "./services/ConfigStore.ts";
18
+
19
+ // ---------------------------------------------------------------------------------------------------------------------
20
+
21
+ /**
22
+ * Provides versioned configuration management for Alepha applications.
23
+ *
24
+ * Features:
25
+ * - Type-safe, versioned configuration with `$config` primitive
26
+ * - Schema validation with auto-migration detection
27
+ * - Scheduled activation (FUTURE, NEXT, CURRENT, EXPIRED statuses)
28
+ * - PostgreSQL persistence with full version history
29
+ * - Cross-instance synchronization via topic
30
+ * - Tree view support via dot-notation naming
31
+ * - REST API for configuration management
32
+ * - Automatic activation scheduler
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { Alepha } from "alepha";
37
+ * import { AlephaApiParameters } from "alepha/api/parameters";
38
+ *
39
+ * const alepha = Alepha.create();
40
+ * alepha.with(AlephaApiParameters);
41
+ *
42
+ * // Then use $config in your services:
43
+ * class AppConfig {
44
+ * features = $config({
45
+ * name: "app.features.flags",
46
+ * schema: t.object({
47
+ * enableBeta: t.boolean(),
48
+ * maxUploadSize: t.number()
49
+ * }),
50
+ * default: { enableBeta: false, maxUploadSize: 10485760 }
51
+ * });
52
+ * }
53
+ * ```
54
+ *
55
+ * @module alepha.api.parameters
56
+ */
57
+ export const AlephaApiParameters = $module({
58
+ name: "alepha.api.parameters",
59
+ services: [ConfigStore, ConfigController, ConfigActivationScheduler],
60
+ });