alepha 0.15.0 → 0.15.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 (551) hide show
  1. package/README.md +43 -98
  2. package/dist/api/audits/index.d.ts +630 -653
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js +12 -35
  5. package/dist/api/audits/index.js.map +1 -1
  6. package/dist/api/files/index.d.ts +365 -358
  7. package/dist/api/files/index.d.ts.map +1 -1
  8. package/dist/api/files/index.js +12 -5
  9. package/dist/api/files/index.js.map +1 -1
  10. package/dist/api/jobs/index.d.ts +255 -248
  11. package/dist/api/jobs/index.d.ts.map +1 -1
  12. package/dist/api/jobs/index.js +10 -3
  13. package/dist/api/jobs/index.js.map +1 -1
  14. package/dist/api/keys/index.d.ts +413 -0
  15. package/dist/api/keys/index.d.ts.map +1 -0
  16. package/dist/api/keys/index.js +476 -0
  17. package/dist/api/keys/index.js.map +1 -0
  18. package/dist/api/notifications/index.browser.js +4 -4
  19. package/dist/api/notifications/index.browser.js.map +1 -1
  20. package/dist/api/notifications/index.d.ts +84 -78
  21. package/dist/api/notifications/index.d.ts.map +1 -1
  22. package/dist/api/notifications/index.js +14 -8
  23. package/dist/api/notifications/index.js.map +1 -1
  24. package/dist/api/parameters/index.d.ts +528 -535
  25. package/dist/api/parameters/index.d.ts.map +1 -1
  26. package/dist/api/parameters/index.js +30 -37
  27. package/dist/api/parameters/index.js.map +1 -1
  28. package/dist/api/users/index.d.ts +1221 -910
  29. package/dist/api/users/index.d.ts.map +1 -1
  30. package/dist/api/users/index.js +2556 -248
  31. package/dist/api/users/index.js.map +1 -1
  32. package/dist/api/verifications/index.d.ts +142 -136
  33. package/dist/api/verifications/index.d.ts.map +1 -1
  34. package/dist/api/verifications/index.js +12 -4
  35. package/dist/api/verifications/index.js.map +1 -1
  36. package/dist/batch/index.d.ts +142 -162
  37. package/dist/batch/index.d.ts.map +1 -1
  38. package/dist/batch/index.js +31 -44
  39. package/dist/batch/index.js.map +1 -1
  40. package/dist/bucket/index.d.ts +595 -171
  41. package/dist/bucket/index.d.ts.map +1 -1
  42. package/dist/bucket/index.js +1856 -12
  43. package/dist/bucket/index.js.map +1 -1
  44. package/dist/cache/core/index.d.ts +225 -53
  45. package/dist/cache/core/index.d.ts.map +1 -1
  46. package/dist/cache/core/index.js +213 -7
  47. package/dist/cache/core/index.js.map +1 -1
  48. package/dist/cache/redis/index.d.ts +1 -0
  49. package/dist/cache/redis/index.d.ts.map +1 -1
  50. package/dist/cache/redis/index.js +6 -2
  51. package/dist/cache/redis/index.js.map +1 -1
  52. package/dist/cli/index.d.ts +834 -226
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +2872 -417
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/command/index.d.ts +458 -310
  57. package/dist/command/index.d.ts.map +1 -1
  58. package/dist/command/index.js +2011 -76
  59. package/dist/command/index.js.map +1 -1
  60. package/dist/core/index.browser.js +309 -97
  61. package/dist/core/index.browser.js.map +1 -1
  62. package/dist/core/index.d.ts +796 -701
  63. package/dist/core/index.d.ts.map +1 -1
  64. package/dist/core/index.js +329 -97
  65. package/dist/core/index.js.map +1 -1
  66. package/dist/core/index.native.js +309 -97
  67. package/dist/core/index.native.js.map +1 -1
  68. package/dist/datetime/index.d.ts +59 -44
  69. package/dist/datetime/index.d.ts.map +1 -1
  70. package/dist/datetime/index.js +15 -0
  71. package/dist/datetime/index.js.map +1 -1
  72. package/dist/email/index.d.ts +314 -19
  73. package/dist/email/index.d.ts.map +1 -1
  74. package/dist/email/index.js +1852 -7
  75. package/dist/email/index.js.map +1 -1
  76. package/dist/fake/index.d.ts +5500 -5418
  77. package/dist/fake/index.d.ts.map +1 -1
  78. package/dist/fake/index.js +113 -42
  79. package/dist/fake/index.js.map +1 -1
  80. package/dist/lock/core/index.d.ts +219 -212
  81. package/dist/lock/core/index.d.ts.map +1 -1
  82. package/dist/lock/core/index.js +11 -4
  83. package/dist/lock/core/index.js.map +1 -1
  84. package/dist/lock/redis/index.d.ts.map +1 -1
  85. package/dist/logger/index.d.ts +41 -90
  86. package/dist/logger/index.d.ts.map +1 -1
  87. package/dist/logger/index.js +15 -68
  88. package/dist/logger/index.js.map +1 -1
  89. package/dist/mcp/index.d.ts +228 -230
  90. package/dist/mcp/index.d.ts.map +1 -1
  91. package/dist/mcp/index.js +32 -31
  92. package/dist/mcp/index.js.map +1 -1
  93. package/dist/orm/index.browser.js +12 -12
  94. package/dist/orm/index.browser.js.map +1 -1
  95. package/dist/orm/index.bun.js +90 -80
  96. package/dist/orm/index.bun.js.map +1 -1
  97. package/dist/orm/index.d.ts +1434 -1459
  98. package/dist/orm/index.d.ts.map +1 -1
  99. package/dist/orm/index.js +112 -130
  100. package/dist/orm/index.js.map +1 -1
  101. package/dist/queue/core/index.d.ts +262 -254
  102. package/dist/queue/core/index.d.ts.map +1 -1
  103. package/dist/queue/core/index.js +14 -6
  104. package/dist/queue/core/index.js.map +1 -1
  105. package/dist/queue/redis/index.d.ts.map +1 -1
  106. package/dist/react/auth/index.browser.js +108 -0
  107. package/dist/react/auth/index.browser.js.map +1 -0
  108. package/dist/react/auth/index.d.ts +100 -0
  109. package/dist/react/auth/index.d.ts.map +1 -0
  110. package/dist/react/auth/index.js +145 -0
  111. package/dist/react/auth/index.js.map +1 -0
  112. package/dist/react/core/index.d.ts +469 -0
  113. package/dist/react/core/index.d.ts.map +1 -0
  114. package/dist/react/core/index.js +464 -0
  115. package/dist/react/core/index.js.map +1 -0
  116. package/dist/react/form/index.d.ts +232 -0
  117. package/dist/react/form/index.d.ts.map +1 -0
  118. package/dist/react/form/index.js +432 -0
  119. package/dist/react/form/index.js.map +1 -0
  120. package/dist/react/head/index.browser.js +423 -0
  121. package/dist/react/head/index.browser.js.map +1 -0
  122. package/dist/react/head/index.d.ts +288 -0
  123. package/dist/react/head/index.d.ts.map +1 -0
  124. package/dist/react/head/index.js +465 -0
  125. package/dist/react/head/index.js.map +1 -0
  126. package/dist/react/i18n/index.d.ts +175 -0
  127. package/dist/react/i18n/index.d.ts.map +1 -0
  128. package/dist/react/i18n/index.js +224 -0
  129. package/dist/react/i18n/index.js.map +1 -0
  130. package/dist/react/router/index.browser.js +1980 -0
  131. package/dist/react/router/index.browser.js.map +1 -0
  132. package/dist/react/router/index.d.ts +2068 -0
  133. package/dist/react/router/index.d.ts.map +1 -0
  134. package/dist/react/router/index.js +4932 -0
  135. package/dist/react/router/index.js.map +1 -0
  136. package/dist/react/websocket/index.d.ts +117 -0
  137. package/dist/react/websocket/index.d.ts.map +1 -0
  138. package/dist/react/websocket/index.js +107 -0
  139. package/dist/react/websocket/index.js.map +1 -0
  140. package/dist/redis/index.bun.js +4 -0
  141. package/dist/redis/index.bun.js.map +1 -1
  142. package/dist/redis/index.d.ts +127 -130
  143. package/dist/redis/index.d.ts.map +1 -1
  144. package/dist/redis/index.js +16 -25
  145. package/dist/redis/index.js.map +1 -1
  146. package/dist/retry/index.d.ts +80 -71
  147. package/dist/retry/index.d.ts.map +1 -1
  148. package/dist/retry/index.js +11 -2
  149. package/dist/retry/index.js.map +1 -1
  150. package/dist/router/index.d.ts +6 -6
  151. package/dist/router/index.d.ts.map +1 -1
  152. package/dist/scheduler/index.d.ts +119 -28
  153. package/dist/scheduler/index.d.ts.map +1 -1
  154. package/dist/scheduler/index.js +404 -3
  155. package/dist/scheduler/index.js.map +1 -1
  156. package/dist/security/index.d.ts +642 -228
  157. package/dist/security/index.d.ts.map +1 -1
  158. package/dist/security/index.js +1579 -37
  159. package/dist/security/index.js.map +1 -1
  160. package/dist/server/auth/index.d.ts +1141 -111
  161. package/dist/server/auth/index.d.ts.map +1 -1
  162. package/dist/server/auth/index.js +1261 -25
  163. package/dist/server/auth/index.js.map +1 -1
  164. package/dist/server/cache/index.d.ts +63 -78
  165. package/dist/server/cache/index.d.ts.map +1 -1
  166. package/dist/server/cache/index.js +7 -22
  167. package/dist/server/cache/index.js.map +1 -1
  168. package/dist/server/compress/index.d.ts +13 -5
  169. package/dist/server/compress/index.d.ts.map +1 -1
  170. package/dist/server/compress/index.js +10 -2
  171. package/dist/server/compress/index.js.map +1 -1
  172. package/dist/server/cookies/index.d.ts +46 -22
  173. package/dist/server/cookies/index.d.ts.map +1 -1
  174. package/dist/server/cookies/index.js +7 -5
  175. package/dist/server/cookies/index.js.map +1 -1
  176. package/dist/server/core/index.d.ts +307 -196
  177. package/dist/server/core/index.d.ts.map +1 -1
  178. package/dist/server/core/index.js +271 -38
  179. package/dist/server/core/index.js.map +1 -1
  180. package/dist/server/cors/index.d.ts +24 -34
  181. package/dist/server/cors/index.d.ts.map +1 -1
  182. package/dist/server/cors/index.js +7 -21
  183. package/dist/server/cors/index.js.map +1 -1
  184. package/dist/server/health/index.d.ts +25 -19
  185. package/dist/server/health/index.d.ts.map +1 -1
  186. package/dist/server/health/index.js +8 -2
  187. package/dist/server/health/index.js.map +1 -1
  188. package/dist/server/helmet/index.d.ts +13 -5
  189. package/dist/server/helmet/index.d.ts.map +1 -1
  190. package/dist/server/helmet/index.js +11 -3
  191. package/dist/server/helmet/index.js.map +1 -1
  192. package/dist/server/links/index.browser.js +9 -1
  193. package/dist/server/links/index.browser.js.map +1 -1
  194. package/dist/server/links/index.d.ts +133 -128
  195. package/dist/server/links/index.d.ts.map +1 -1
  196. package/dist/server/links/index.js +24 -11
  197. package/dist/server/links/index.js.map +1 -1
  198. package/dist/server/metrics/index.d.ts +524 -4
  199. package/dist/server/metrics/index.d.ts.map +1 -1
  200. package/dist/server/metrics/index.js +4472 -7
  201. package/dist/server/metrics/index.js.map +1 -1
  202. package/dist/server/multipart/index.d.ts +15 -9
  203. package/dist/server/multipart/index.d.ts.map +1 -1
  204. package/dist/server/multipart/index.js +9 -3
  205. package/dist/server/multipart/index.js.map +1 -1
  206. package/dist/server/proxy/index.d.ts +110 -104
  207. package/dist/server/proxy/index.d.ts.map +1 -1
  208. package/dist/server/proxy/index.js +8 -2
  209. package/dist/server/proxy/index.js.map +1 -1
  210. package/dist/server/rate-limit/index.d.ts +46 -51
  211. package/dist/server/rate-limit/index.d.ts.map +1 -1
  212. package/dist/server/rate-limit/index.js +18 -55
  213. package/dist/server/rate-limit/index.js.map +1 -1
  214. package/dist/server/static/index.d.ts +181 -48
  215. package/dist/server/static/index.d.ts.map +1 -1
  216. package/dist/server/static/index.js +1848 -5
  217. package/dist/server/static/index.js.map +1 -1
  218. package/dist/server/swagger/index.d.ts +348 -53
  219. package/dist/server/swagger/index.d.ts.map +1 -1
  220. package/dist/server/swagger/index.js +1849 -6
  221. package/dist/server/swagger/index.js.map +1 -1
  222. package/dist/sms/index.d.ts +312 -18
  223. package/dist/sms/index.d.ts.map +1 -1
  224. package/dist/sms/index.js +1854 -10
  225. package/dist/sms/index.js.map +1 -1
  226. package/dist/system/index.browser.js +496 -0
  227. package/dist/system/index.browser.js.map +1 -0
  228. package/dist/system/index.d.ts +1158 -0
  229. package/dist/system/index.d.ts.map +1 -0
  230. package/dist/{file → system}/index.js +412 -20
  231. package/dist/system/index.js.map +1 -0
  232. package/dist/thread/index.d.ts +82 -73
  233. package/dist/thread/index.d.ts.map +1 -1
  234. package/dist/thread/index.js +13 -4
  235. package/dist/thread/index.js.map +1 -1
  236. package/dist/topic/core/index.d.ts +330 -323
  237. package/dist/topic/core/index.d.ts.map +1 -1
  238. package/dist/topic/core/index.js +12 -5
  239. package/dist/topic/core/index.js.map +1 -1
  240. package/dist/topic/redis/index.d.ts +6 -6
  241. package/dist/topic/redis/index.d.ts.map +1 -1
  242. package/dist/vite/index.d.ts +163 -5825
  243. package/dist/vite/index.d.ts.map +1 -1
  244. package/dist/vite/index.js +130 -477
  245. package/dist/vite/index.js.map +1 -1
  246. package/dist/websocket/index.browser.js +3 -3
  247. package/dist/websocket/index.browser.js.map +1 -1
  248. package/dist/websocket/index.d.ts +287 -283
  249. package/dist/websocket/index.d.ts.map +1 -1
  250. package/dist/websocket/index.js +15 -11
  251. package/dist/websocket/index.js.map +1 -1
  252. package/package.json +86 -17
  253. package/src/api/audits/index.ts +10 -33
  254. package/src/api/files/__tests__/$bucket.spec.ts +1 -1
  255. package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
  256. package/src/api/files/controllers/FileController.spec.ts +1 -1
  257. package/src/api/files/index.ts +10 -3
  258. package/src/api/files/jobs/FileJobs.spec.ts +1 -1
  259. package/src/api/files/services/FileService.spec.ts +1 -1
  260. package/src/api/jobs/index.ts +10 -3
  261. package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
  262. package/src/api/keys/controllers/ApiKeyController.ts +103 -0
  263. package/src/api/keys/entities/apiKeyEntity.ts +41 -0
  264. package/src/api/keys/index.ts +49 -0
  265. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
  266. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
  267. package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
  268. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
  269. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
  270. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
  271. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
  272. package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
  273. package/src/api/keys/services/ApiKeyService.ts +306 -0
  274. package/src/api/logs/TODO.md +52 -0
  275. package/src/api/notifications/index.ts +10 -4
  276. package/src/api/parameters/index.ts +9 -30
  277. package/src/api/parameters/primitives/$config.ts +12 -4
  278. package/src/api/parameters/services/ConfigStore.ts +9 -3
  279. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
  280. package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
  281. package/src/api/users/index.ts +14 -3
  282. package/src/api/users/primitives/$realm.ts +33 -5
  283. package/src/api/users/providers/RealmProvider.ts +1 -12
  284. package/src/api/users/services/SessionService.ts +1 -11
  285. package/src/api/verifications/controllers/VerificationController.ts +2 -0
  286. package/src/api/verifications/index.ts +10 -4
  287. package/src/batch/index.ts +9 -36
  288. package/src/batch/primitives/$batch.ts +0 -8
  289. package/src/batch/providers/BatchProvider.ts +29 -2
  290. package/src/bucket/__tests__/shared.ts +1 -1
  291. package/src/bucket/index.ts +13 -6
  292. package/src/bucket/primitives/$bucket.ts +1 -1
  293. package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
  294. package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
  295. package/src/cache/core/__tests__/shared.ts +30 -0
  296. package/src/cache/core/index.ts +11 -6
  297. package/src/cache/core/primitives/$cache.spec.ts +5 -0
  298. package/src/cache/core/providers/CacheProvider.ts +17 -0
  299. package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
  300. package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
  301. package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
  302. package/src/cli/apps/AlephaCli.ts +3 -16
  303. package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -2
  304. package/src/cli/atoms/appEntryOptions.ts +13 -0
  305. package/src/cli/atoms/buildOptions.ts +1 -1
  306. package/src/cli/atoms/changelogOptions.ts +1 -1
  307. package/src/cli/commands/build.ts +64 -52
  308. package/src/cli/commands/db.ts +17 -11
  309. package/src/cli/commands/deploy.ts +1 -1
  310. package/src/cli/commands/dev.ts +13 -49
  311. package/src/cli/commands/gen/env.ts +6 -3
  312. package/src/cli/commands/gen/openapi.ts +5 -2
  313. package/src/cli/commands/init.spec.ts +544 -0
  314. package/src/cli/commands/init.ts +101 -58
  315. package/src/cli/commands/lint.ts +8 -2
  316. package/src/cli/commands/typecheck.ts +11 -0
  317. package/src/cli/defineConfig.ts +9 -0
  318. package/src/cli/index.ts +2 -1
  319. package/src/cli/providers/AppEntryProvider.ts +131 -0
  320. package/src/cli/providers/ViteBuildProvider.ts +40 -0
  321. package/src/cli/providers/ViteDevServerProvider.ts +378 -0
  322. package/src/cli/services/AlephaCliUtils.ts +39 -93
  323. package/src/cli/services/PackageManagerUtils.ts +140 -17
  324. package/src/cli/services/ProjectScaffolder.ts +169 -101
  325. package/src/cli/services/ViteUtils.ts +82 -0
  326. package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +41 -28
  327. package/src/cli/{assets → templates}/apiHelloControllerTs.ts +2 -1
  328. package/src/cli/{assets → templates}/biomeJson.ts +2 -1
  329. package/src/cli/{assets → templates}/dummySpecTs.ts +2 -1
  330. package/src/cli/{assets → templates}/editorconfig.ts +2 -1
  331. package/src/cli/templates/gitignore.ts +39 -0
  332. package/src/cli/{assets → templates}/mainBrowserTs.ts +2 -1
  333. package/src/cli/templates/mainCss.ts +33 -0
  334. package/src/cli/templates/mainServerTs.ts +33 -0
  335. package/src/cli/{assets → templates}/tsconfigJson.ts +2 -1
  336. package/src/cli/templates/webAppRouterTs.ts +50 -0
  337. package/src/cli/templates/webHelloComponentTsx.ts +20 -0
  338. package/src/command/helpers/Runner.spec.ts +4 -0
  339. package/src/command/helpers/Runner.ts +3 -21
  340. package/src/command/index.ts +12 -4
  341. package/src/command/providers/CliProvider.spec.ts +1067 -0
  342. package/src/command/providers/CliProvider.ts +203 -40
  343. package/src/core/Alepha.ts +3 -9
  344. package/src/core/__tests__/Alepha-start.spec.ts +4 -4
  345. package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
  346. package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
  347. package/src/core/index.shared.ts +1 -0
  348. package/src/core/index.ts +20 -0
  349. package/src/core/primitives/$module.ts +12 -0
  350. package/src/core/providers/EventManager.spec.ts +0 -71
  351. package/src/core/providers/EventManager.ts +3 -15
  352. package/src/core/providers/Json.ts +2 -14
  353. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +257 -0
  354. package/src/core/providers/KeylessJsonSchemaCodec.ts +396 -14
  355. package/src/core/providers/SchemaValidator.spec.ts +236 -0
  356. package/src/datetime/index.ts +15 -0
  357. package/src/email/index.ts +10 -5
  358. package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
  359. package/src/email/providers/LocalEmailProvider.ts +1 -1
  360. package/src/fake/__tests__/keyName.example.ts +1 -1
  361. package/src/fake/__tests__/keyName.spec.ts +5 -5
  362. package/src/fake/index.ts +9 -6
  363. package/src/fake/providers/FakeProvider.spec.ts +258 -40
  364. package/src/fake/providers/FakeProvider.ts +133 -19
  365. package/src/lock/core/index.ts +11 -4
  366. package/src/logger/index.ts +17 -66
  367. package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
  368. package/src/mcp/errors/McpError.ts +30 -0
  369. package/src/mcp/index.ts +13 -27
  370. package/src/mcp/transports/SseMcpTransport.ts +6 -7
  371. package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
  372. package/src/orm/index.browser.ts +2 -2
  373. package/src/orm/index.bun.ts +4 -2
  374. package/src/orm/index.ts +21 -47
  375. package/src/orm/providers/DrizzleKitProvider.ts +3 -5
  376. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -0
  377. package/src/orm/services/Repository.ts +18 -3
  378. package/src/queue/core/index.ts +14 -6
  379. package/src/react/auth/__tests__/$auth.spec.ts +202 -0
  380. package/src/react/auth/hooks/useAuth.ts +32 -0
  381. package/src/react/auth/index.browser.ts +13 -0
  382. package/src/react/auth/index.shared.ts +2 -0
  383. package/src/react/auth/index.ts +48 -0
  384. package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
  385. package/src/react/auth/services/ReactAuth.ts +135 -0
  386. package/src/react/core/__tests__/Router.spec.tsx +169 -0
  387. package/src/react/core/components/ClientOnly.tsx +49 -0
  388. package/src/react/core/components/ErrorBoundary.tsx +73 -0
  389. package/src/react/core/contexts/AlephaContext.ts +7 -0
  390. package/src/react/core/contexts/AlephaProvider.tsx +42 -0
  391. package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
  392. package/src/react/core/hooks/useAction.ts +480 -0
  393. package/src/react/core/hooks/useAlepha.ts +26 -0
  394. package/src/react/core/hooks/useClient.ts +17 -0
  395. package/src/react/core/hooks/useEvents.ts +51 -0
  396. package/src/react/core/hooks/useInject.ts +12 -0
  397. package/src/react/core/hooks/useStore.ts +52 -0
  398. package/src/react/core/index.ts +90 -0
  399. package/src/react/form/components/FormState.tsx +17 -0
  400. package/src/react/form/errors/FormValidationError.ts +18 -0
  401. package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
  402. package/src/react/form/hooks/useForm.ts +47 -0
  403. package/src/react/form/hooks/useFormState.ts +130 -0
  404. package/src/react/form/index.ts +44 -0
  405. package/src/react/form/services/FormModel.ts +614 -0
  406. package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
  407. package/src/react/head/helpers/SeoExpander.ts +142 -0
  408. package/src/react/head/hooks/useHead.spec.tsx +288 -0
  409. package/src/react/head/hooks/useHead.ts +62 -0
  410. package/src/react/head/index.browser.ts +26 -0
  411. package/src/react/head/index.ts +44 -0
  412. package/src/react/head/interfaces/Head.ts +105 -0
  413. package/src/react/head/primitives/$head.ts +25 -0
  414. package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
  415. package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
  416. package/src/react/head/providers/HeadProvider.ts +168 -0
  417. package/src/react/head/providers/ServerHeadProvider.ts +31 -0
  418. package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
  419. package/src/react/i18n/components/Localize.spec.tsx +357 -0
  420. package/src/react/i18n/components/Localize.tsx +35 -0
  421. package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
  422. package/src/react/i18n/hooks/useI18n.ts +18 -0
  423. package/src/react/i18n/index.ts +41 -0
  424. package/src/react/i18n/primitives/$dictionary.ts +69 -0
  425. package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
  426. package/src/react/i18n/providers/I18nProvider.ts +278 -0
  427. package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
  428. package/src/react/router/__tests__/page-head.spec.ts +48 -0
  429. package/src/react/router/__tests__/seo-head.spec.ts +125 -0
  430. package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
  431. package/src/react/router/components/ErrorViewer.tsx +872 -0
  432. package/src/react/router/components/Link.tsx +23 -0
  433. package/src/react/router/components/NestedView.tsx +223 -0
  434. package/src/react/router/components/NotFound.tsx +30 -0
  435. package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
  436. package/src/react/router/contexts/RouterLayerContext.ts +12 -0
  437. package/src/react/router/errors/Redirection.ts +28 -0
  438. package/src/react/router/hooks/useActive.ts +52 -0
  439. package/src/react/router/hooks/useQueryParams.ts +63 -0
  440. package/src/react/router/hooks/useRouter.ts +20 -0
  441. package/src/react/router/hooks/useRouterState.ts +11 -0
  442. package/src/react/router/index.browser.ts +45 -0
  443. package/src/react/router/index.shared.ts +19 -0
  444. package/src/react/router/index.ts +142 -0
  445. package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
  446. package/src/react/router/primitives/$page.spec.tsx +708 -0
  447. package/src/react/router/primitives/$page.ts +497 -0
  448. package/src/react/router/providers/ReactBrowserProvider.ts +309 -0
  449. package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
  450. package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
  451. package/src/react/router/providers/ReactPageProvider.ts +726 -0
  452. package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
  453. package/src/react/router/providers/ReactServerProvider.ts +558 -0
  454. package/src/react/router/providers/ReactServerTemplateProvider.ts +979 -0
  455. package/src/react/router/providers/SSRManifestProvider.ts +334 -0
  456. package/src/react/router/services/ReactPageServerService.ts +48 -0
  457. package/src/react/router/services/ReactPageService.ts +27 -0
  458. package/src/react/router/services/ReactRouter.ts +262 -0
  459. package/src/react/websocket/hooks/useRoom.tsx +242 -0
  460. package/src/react/websocket/index.ts +7 -0
  461. package/src/redis/__tests__/redis.spec.ts +13 -0
  462. package/src/redis/index.ts +9 -25
  463. package/src/redis/providers/BunRedisProvider.ts +9 -0
  464. package/src/redis/providers/NodeRedisProvider.ts +8 -0
  465. package/src/redis/providers/RedisProvider.ts +16 -0
  466. package/src/retry/index.ts +11 -2
  467. package/src/router/index.ts +15 -0
  468. package/src/scheduler/index.ts +11 -2
  469. package/src/security/__tests__/BasicAuth.spec.ts +2 -0
  470. package/src/security/__tests__/ServerSecurityProvider.spec.ts +13 -5
  471. package/src/security/index.ts +15 -10
  472. package/src/security/interfaces/IssuerResolver.ts +27 -0
  473. package/src/security/primitives/$issuer.ts +55 -0
  474. package/src/security/providers/SecurityProvider.ts +179 -0
  475. package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
  476. package/src/security/providers/ServerSecurityProvider.ts +36 -22
  477. package/src/server/auth/index.ts +12 -7
  478. package/src/server/cache/index.ts +7 -22
  479. package/src/server/compress/index.ts +10 -2
  480. package/src/server/cookies/index.ts +7 -5
  481. package/src/server/cookies/primitives/$cookie.ts +33 -11
  482. package/src/server/core/index.ts +17 -7
  483. package/src/server/core/interfaces/ServerRequest.ts +83 -1
  484. package/src/server/core/primitives/$action.spec.ts +1 -1
  485. package/src/server/core/primitives/$action.ts +8 -3
  486. package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
  487. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
  488. package/src/server/core/providers/NodeHttpServerProvider.ts +77 -22
  489. package/src/server/core/providers/ServerLoggerProvider.ts +2 -2
  490. package/src/server/core/providers/ServerProvider.ts +9 -12
  491. package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
  492. package/src/server/core/services/ServerRequestParser.ts +306 -13
  493. package/src/server/cors/index.ts +7 -21
  494. package/src/server/cors/primitives/$cors.ts +6 -2
  495. package/src/server/health/index.ts +8 -2
  496. package/src/server/helmet/index.ts +11 -3
  497. package/src/server/links/atoms/apiLinksAtom.ts +7 -0
  498. package/src/server/links/index.browser.ts +2 -0
  499. package/src/server/links/index.ts +13 -6
  500. package/src/server/metrics/index.ts +10 -3
  501. package/src/server/multipart/index.ts +9 -3
  502. package/src/server/proxy/index.ts +8 -2
  503. package/src/server/rate-limit/index.ts +21 -25
  504. package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
  505. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
  506. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
  507. package/src/server/static/index.ts +8 -2
  508. package/src/server/static/providers/ServerStaticProvider.ts +1 -1
  509. package/src/server/swagger/index.ts +9 -4
  510. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  511. package/src/sms/index.ts +9 -5
  512. package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
  513. package/src/sms/providers/LocalSmsProvider.ts +1 -1
  514. package/src/system/index.browser.ts +11 -0
  515. package/src/system/index.ts +62 -0
  516. package/src/{file → system}/providers/FileSystemProvider.ts +16 -0
  517. package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
  518. package/src/system/providers/MemoryShellProvider.ts +164 -0
  519. package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
  520. package/src/{file → system}/providers/NodeFileSystemProvider.ts +36 -0
  521. package/src/system/providers/NodeShellProvider.ts +184 -0
  522. package/src/system/providers/ShellProvider.ts +74 -0
  523. package/src/{file → system}/services/FileDetector.spec.ts +2 -2
  524. package/src/thread/index.ts +11 -2
  525. package/src/topic/core/index.ts +12 -5
  526. package/src/vite/index.ts +3 -2
  527. package/src/vite/tasks/buildClient.ts +2 -8
  528. package/src/vite/tasks/buildServer.ts +84 -21
  529. package/src/vite/tasks/copyAssets.ts +5 -4
  530. package/src/vite/tasks/generateSitemap.ts +64 -23
  531. package/src/vite/tasks/index.ts +0 -2
  532. package/src/vite/tasks/prerenderPages.ts +49 -24
  533. package/src/websocket/index.ts +12 -8
  534. package/dist/file/index.d.ts +0 -839
  535. package/dist/file/index.d.ts.map +0 -1
  536. package/dist/file/index.js.map +0 -1
  537. package/src/cli/assets/indexHtml.ts +0 -15
  538. package/src/cli/assets/mainServerTs.ts +0 -24
  539. package/src/cli/assets/webAppRouterTs.ts +0 -15
  540. package/src/cli/assets/webHelloComponentTsx.ts +0 -16
  541. package/src/cli/commands/format.ts +0 -23
  542. package/src/file/index.ts +0 -43
  543. package/src/vite/helpers/boot.ts +0 -117
  544. package/src/vite/plugins/viteAlephaDev.ts +0 -177
  545. package/src/vite/tasks/devServer.ts +0 -71
  546. package/src/vite/tasks/runAlepha.ts +0 -270
  547. /package/dist/orm/{chunk-DtkW-qnP.js → chunk-DH6iiROE.js} +0 -0
  548. /package/src/cli/{assets → templates}/apiIndexTs.ts +0 -0
  549. /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
  550. /package/src/{file → system}/errors/FileError.ts +0 -0
  551. /package/src/{file → system}/services/FileDetector.ts +0 -0
@@ -1,13 +1,13 @@
1
1
  import * as alepha19 from "alepha";
2
2
  import { Alepha, AlephaError, Async, CompiledEventExecutor, FileLike, Hooks, KIND, Primitive, Static, StreamLike, TArray, TFile, TObject, TRecord, TSchema, TStream, TString, TVoid } from "alepha";
3
- import * as alepha_logger4 from "alepha/logger";
3
+ import * as alepha_logger6 from "alepha/logger";
4
4
  import { Readable } from "node:stream";
5
5
  import { DateTimeProvider, DurationLike } from "alepha/datetime";
6
6
  import { ReadableStream } from "node:stream/web";
7
7
  import { Route, RouterProvider } from "alepha/router";
8
8
  import * as alepha_cache0 from "alepha/cache";
9
- import * as node_http0 from "node:http";
10
9
  import { IncomingMessage, Server, ServerResponse as ServerResponse$1 } from "node:http";
10
+ import { Socket } from "node:net";
11
11
 
12
12
  //#region ../../src/server/core/schemas/errorSchema.d.ts
13
13
  declare const errorSchema: alepha19.TObject<{
@@ -59,20 +59,20 @@ declare class ServerReply {
59
59
  status?: number;
60
60
  body?: any;
61
61
  /**
62
- * Redirect to a given URL with optional status code (default 301).
63
- */
62
+ * Redirect to a given URL with optional status code (default 301).
63
+ */
64
64
  redirect(url: string, status?: number): void;
65
65
  /**
66
- * Set the response status code.
67
- */
66
+ * Set the response status code.
67
+ */
68
68
  setStatus(status: number): this;
69
69
  /**
70
- * Set a response header.
71
- */
70
+ * Set a response header.
71
+ */
72
72
  setHeader(name: string, value: string): this;
73
73
  /**
74
- * Set the response body.
75
- */
74
+ * Set the response body.
75
+ */
76
76
  setBody(body: any): this;
77
77
  }
78
78
  //#endregion
@@ -111,73 +111,103 @@ interface ServerRequestConfig<TConfig extends RequestConfigSchema = RequestConfi
111
111
  type ServerRequestConfigEntry<TConfig extends RequestConfigSchema = RequestConfigSchema> = Partial<ServerRequestConfig<TConfig>>;
112
112
  interface ServerRequest<TConfig extends RequestConfigSchema = RequestConfigSchema> extends ServerRequestConfig<TConfig> {
113
113
  /**
114
- * HTTP method used for this request.
115
- */
114
+ * HTTP method used for this request.
115
+ */
116
116
  method: RouteMethod;
117
117
  /**
118
- * Full request URL.
119
- */
118
+ * Full request URL.
119
+ */
120
120
  url: URL;
121
121
  /**
122
- * Unique request ID assigned to this request.
123
- */
122
+ * Unique request ID assigned to this request.
123
+ */
124
124
  requestId: string;
125
125
  /**
126
- * Client IP address.
127
- * Will parse `X-Forwarded-For` header if present.
128
- */
126
+ * Client IP address.
127
+ * Uses `X-Forwarded-For` header when `TRUST_PROXY=true`.
128
+ */
129
129
  ip?: string;
130
130
  /**
131
- * Value of the `Host` header sent by the client.
132
- */
131
+ * Value of the `Host` header sent by the client.
132
+ */
133
133
  host?: string;
134
134
  /**
135
- * Browser user agent information.
136
- * Information are not guaranteed to be accurate. Use with caution.
137
- *
138
- * @see {@link UserAgentParser}
139
- */
135
+ * Browser user agent information.
136
+ * Information are not guaranteed to be accurate. Use with caution.
137
+ *
138
+ * @see {@link UserAgentParser}
139
+ */
140
140
  userAgent: UserAgentInfo;
141
141
  /**
142
- * Arbitrary metadata attached to the request. Can be used by middlewares to store information.
143
- */
142
+ * Geolocation information derived from proxy headers.
143
+ * Available when behind Cloudflare, Vercel, or similar CDNs.
144
+ */
145
+ geo: RequestGeo;
146
+ /**
147
+ * Whether the request appears to be from a bot/crawler.
148
+ * Based on user-agent analysis.
149
+ */
150
+ isBot: boolean;
151
+ /**
152
+ * Whether the request is from a mobile device.
153
+ * Based on user-agent analysis.
154
+ */
155
+ isMobile: boolean;
156
+ /**
157
+ * Request protocol (http or https).
158
+ * Uses `X-Forwarded-Proto` header when behind a proxy.
159
+ */
160
+ protocol: "http" | "https";
161
+ /**
162
+ * Preferred language from `Accept-Language` header.
163
+ * Returns the first/most preferred language code (e.g., "en", "fr", "en-US").
164
+ */
165
+ language?: string;
166
+ /**
167
+ * Parsed referer information.
168
+ * Undefined if no Referer header or invalid URL.
169
+ */
170
+ referer?: RequestReferer;
171
+ /**
172
+ * Arbitrary metadata attached to the request. Can be used by middlewares to store information.
173
+ */
144
174
  metadata: Record<string, any>;
145
175
  /**
146
- * Reply object to be used to send response.
147
- */
176
+ * Reply object to be used to send response.
177
+ */
148
178
  reply: ServerReply;
149
179
  /**
150
- * The raw underlying request object (Web Request).
151
- */
180
+ * The raw underlying request object (Web Request).
181
+ */
152
182
  raw: ServerRawRequest;
153
183
  }
154
184
  interface ServerRoute<TConfig extends RequestConfigSchema = RequestConfigSchema> extends Route {
155
185
  /**
156
- * Handler function for this route.
157
- */
186
+ * Handler function for this route.
187
+ */
158
188
  handler: ServerHandler<TConfig>;
159
189
  /**
160
- * HTTP method for this route.
161
- */
190
+ * HTTP method for this route.
191
+ */
162
192
  method?: RouteMethod;
163
193
  /**
164
- * Request/response schema for this route.
165
- *
166
- * Request schema contains:
167
- * - body, for POST/PUT/PATCH requests
168
- * - params, for URL parameters (e.g. /user/:id)
169
- * - query, for URL query parameters (e.g. /user?id=123)
170
- * - headers, for HTTP headers
171
- *
172
- * Response schema contains:
173
- * - response
174
- *
175
- * Response schema is used to validate and serialize the response sent by the handler.
176
- */
194
+ * Request/response schema for this route.
195
+ *
196
+ * Request schema contains:
197
+ * - body, for POST/PUT/PATCH requests
198
+ * - params, for URL parameters (e.g. /user/:id)
199
+ * - query, for URL query parameters (e.g. /user?id=123)
200
+ * - headers, for HTTP headers
201
+ *
202
+ * Response schema contains:
203
+ * - response
204
+ *
205
+ * Response schema is used to validate and serialize the response sent by the handler.
206
+ */
177
207
  schema?: TConfig;
178
208
  /**
179
- * @see ServerLoggerProvider
180
- */
209
+ * @see ServerLoggerProvider
210
+ */
181
211
  silent?: boolean;
182
212
  }
183
213
  type ServerResponseBody<TConfig extends RequestConfigSchema = RequestConfigSchema> = TConfig["response"] extends TResponseBody ? Static<TConfig["response"]> : ResponseBodyType;
@@ -213,21 +243,75 @@ interface WebRequestEvent {
213
243
  req: Request;
214
244
  res?: Response;
215
245
  }
246
+ /**
247
+ * Geolocation information from proxy headers (Cloudflare, Vercel, etc.)
248
+ */
249
+ interface RequestGeo {
250
+ /**
251
+ * ISO 3166-1 alpha-2 country code (e.g., "US", "FR", "JP").
252
+ */
253
+ country?: string;
254
+ /**
255
+ * City name (e.g., "San Francisco", "Paris").
256
+ */
257
+ city?: string;
258
+ /**
259
+ * Region/state (e.g., "California", "Île-de-France").
260
+ */
261
+ region?: string;
262
+ /**
263
+ * Latitude (if available).
264
+ */
265
+ latitude?: string;
266
+ /**
267
+ * Longitude (if available).
268
+ */
269
+ longitude?: string;
270
+ }
271
+ /**
272
+ * Parsed referer information.
273
+ */
274
+ interface RequestReferer {
275
+ /**
276
+ * Full referer URL.
277
+ */
278
+ url: string;
279
+ /**
280
+ * Hostname of the referer (e.g., "google.com").
281
+ */
282
+ hostname: string;
283
+ /**
284
+ * Path of the referer URL.
285
+ */
286
+ pathname: string;
287
+ }
216
288
  //#endregion
217
289
  //#region ../../src/server/core/services/ServerRequestParser.d.ts
218
290
  declare class ServerRequestParser {
219
291
  protected readonly alepha: Alepha;
220
292
  protected readonly userAgentParser: UserAgentParser;
293
+ protected readonly env: {
294
+ TRUST_PROXY: boolean;
295
+ };
221
296
  createServerRequest(rawRequest: ServerRequestData): ServerRequest;
222
297
  getRequestId(request: ServerRequestData): string | undefined;
223
298
  getRequestUserAgent(request: ServerRequestData): UserAgentInfo;
224
299
  getRequestIp(request: ServerRequestData): string | undefined;
300
+ protected getConnectionIp(request: ServerRequestData): string | undefined;
301
+ getRequestGeo(request: ServerRequestData): RequestGeo;
302
+ protected static readonly BOT_PATTERNS: RegExp[];
303
+ getIsBot(request: ServerRequestData): boolean;
304
+ protected static readonly MOBILE_PATTERNS: RegExp[];
305
+ getIsMobile(request: ServerRequestData): boolean;
306
+ getProtocol(request: ServerRequestData): "http" | "https";
307
+ getLanguage(request: ServerRequestData): string | undefined;
308
+ getReferer(request: ServerRequestData): RequestReferer | undefined;
225
309
  }
226
310
  //#endregion
227
311
  //#region ../../src/server/core/providers/ServerTimingProvider.d.ts
228
312
  type TimingMap = Record<string, [number, number]>;
229
313
  declare class ServerTimingProvider {
230
- protected readonly log: alepha_logger4.Logger;
314
+ protected readonly log: alepha_logger6.Logger;
231
315
  protected readonly alepha: Alepha;
232
316
  options: {
233
317
  prefix: string;
@@ -251,7 +335,7 @@ declare class ServerTimingProvider {
251
335
  * - $page => React route (for React SSR)
252
336
  */
253
337
  declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
254
- protected readonly log: alepha_logger4.Logger;
338
+ protected readonly log: alepha_logger6.Logger;
255
339
  protected readonly alepha: Alepha;
256
340
  protected readonly routes: ServerRoute[];
257
341
  protected readonly serverTimingProvider: ServerTimingProvider;
@@ -269,39 +353,39 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
269
353
  protected readonly processRequestBound: () => Promise<any>;
270
354
  protected readonly queryKeysCache: WeakMap<object, string[]>;
271
355
  /**
272
- * Get cached keys for a query schema, computing them lazily on first access.
273
- */
356
+ * Get cached keys for a query schema, computing them lazily on first access.
357
+ */
274
358
  protected getQuerySchemaKeys(schema: {
275
359
  properties: object;
276
360
  }): string[];
277
361
  /**
278
- * Compile event executors for optimal performance.
279
- * Called lazily on first request after all hooks are registered.
280
- */
362
+ * Compile event executors for optimal performance.
363
+ * Called lazily on first request after all hooks are registered.
364
+ */
281
365
  protected compileEvents(): void;
282
366
  /**
283
- * Get all registered routes, optionally filtered by a pattern.
284
- *
285
- * Pattern accept simple wildcard '*' at the end.
286
- * Example: '/api/*' will match all routes starting with '/api/' but '/api/' will match only that exact route.
287
- */
367
+ * Get all registered routes, optionally filtered by a pattern.
368
+ *
369
+ * Pattern accept simple wildcard '*' at the end.
370
+ * Example: '/api/*' will match all routes starting with '/api/' but '/api/' will match only that exact route.
371
+ */
288
372
  getRoutes(pattern?: string): ServerRoute[];
289
373
  /**
290
- * Create a new server route.
291
- */
374
+ * Create a new server route.
375
+ */
292
376
  createRoute<TConfig extends RequestConfigSchema = RequestConfigSchema>(route: ServerRoute<TConfig>): void;
293
377
  /**
294
- * Get or generate a context ID from request headers.
295
- */
378
+ * Get or generate a context ID from request headers.
379
+ */
296
380
  protected getContextId(headers: Record<string, string>): string;
297
381
  /**
298
- * Process an incoming request through the full lifecycle:
299
- * - onRequest hooks
300
- * - route handler
301
- * - onSend hooks
302
- * - response serialization
303
- * - onResponse hooks
304
- */
382
+ * Process an incoming request through the full lifecycle:
383
+ * - onRequest hooks
384
+ * - route handler
385
+ * - onSend hooks
386
+ * - response serialization
387
+ * - onResponse hooks
388
+ */
305
389
  protected processRequest(request: ServerRequest, route: ServerRoute, responseKind: ResponseKind): Promise<{
306
390
  status: number;
307
391
  headers: Record<string, string> & {
@@ -310,24 +394,24 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
310
394
  body: any;
311
395
  }>;
312
396
  /**
313
- * Run the route handler with request validation and response serialization.
314
- */
397
+ * Run the route handler with request validation and response serialization.
398
+ */
315
399
  protected runRouteHandler(route: ServerRoute, request: ServerRequest, responseKind: ResponseKind): Promise<void>;
316
400
  /**
317
- * Transform reply body based on response kind and route schema.
318
- */
401
+ * Transform reply body based on response kind and route schema.
402
+ */
319
403
  serializeResponse(route: ServerRoute, reply: ServerReply, responseKind: ResponseKind): void;
320
404
  /**
321
- * Determine response type based on route schema.
322
- */
405
+ * Determine response type based on route schema.
406
+ */
323
407
  protected getResponseType(schema?: RequestConfigSchema): ResponseKind;
324
408
  /**
325
- * When an error occurs during request processing, this method is called.
326
- */
409
+ * When an error occurs during request processing, this method is called.
410
+ */
327
411
  protected errorHandler(route: ServerRoute, request: ServerRequest, error: Error): Promise<void>;
328
412
  /**
329
- * Validate incoming request against route schema.
330
- */
413
+ * Validate incoming request against route schema.
414
+ */
331
415
  validateRequest(route: {
332
416
  schema?: RequestConfigSchema;
333
417
  }, request: ServerRequestConfig): void;
@@ -342,7 +426,7 @@ declare class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
342
426
  * ServerProvider supports both Node.js HTTP requests and Web (Fetch API) requests.
343
427
  */
344
428
  declare class ServerProvider {
345
- protected readonly log: alepha_logger4.Logger;
429
+ protected readonly log: alepha_logger6.Logger;
346
430
  protected readonly alepha: Alepha;
347
431
  protected readonly dateTimeProvider: DateTimeProvider;
348
432
  protected readonly router: ServerRouterProvider;
@@ -363,51 +447,47 @@ declare class ServerProvider {
363
447
  }>;
364
448
  protected readonly urlBaseCache: Map<string, string>;
365
449
  /**
366
- * Get cached URL base (protocol + host) for a given host header.
367
- * Caches the result to avoid repeated string concatenation.
368
- */
450
+ * Get cached URL base (protocol + host) for a given host header.
451
+ * Caches the result to avoid repeated string concatenation.
452
+ */
369
453
  protected getUrlBase(headers: Record<string, string>): string;
370
454
  /**
371
- * Parse query string manually - faster than new URL() + URLSearchParams.
372
- * Returns empty object if no query string.
373
- */
455
+ * Parse query string manually - faster than new URL() + URLSearchParams.
456
+ * Returns empty object if no query string.
457
+ */
374
458
  protected parseQueryString(rawUrl: string): Record<string, string>;
375
459
  /**
376
- * Fast decode - only calls decodeURIComponent if needed.
377
- */
460
+ * Fast decode - only calls decodeURIComponent if needed.
461
+ */
378
462
  protected fastDecode(str: string): string;
379
- /**
380
- * Extract pathname from URL without creating URL object.
381
- */
382
- protected getPathname(rawUrl: string): string;
383
463
  get hostname(): string;
384
464
  /**
385
- * When a Node.js HTTP request is received from outside. (Vercel, AWS Lambda, etc.)
386
- */
465
+ * When a Node.js HTTP request is received from outside. (Vercel, AWS Lambda, etc.)
466
+ */
387
467
  protected readonly onNodeRequest: alepha19.HookPrimitive<"node:request">;
388
468
  /**
389
- * When a Web (Fetch API) request is received from outside. (Netlify, Cloudflare Workers, etc.)
390
- */
469
+ * When a Web (Fetch API) request is received from outside. (Netlify, Cloudflare Workers, etc.)
470
+ */
391
471
  protected readonly onWebRequest: alepha19.HookPrimitive<"web:request">;
392
472
  /**
393
- * Handle Node.js HTTP request event.
394
- *
395
- * Optimized to avoid expensive URL parsing when possible.
396
- */
473
+ * Handle Node.js HTTP request event.
474
+ *
475
+ * Optimized to avoid expensive URL parsing when possible.
476
+ */
397
477
  handleNodeRequest(nodeRequestEvent: NodeRequestEvent): Promise<void>;
398
478
  /**
399
- * Handle Web (Fetch API) request event.
400
- */
479
+ * Handle Web (Fetch API) request event.
480
+ */
401
481
  handleWebRequest(ev: WebRequestEvent): Promise<void>;
402
482
  /**
403
- * Helper for Vite development mode to let Vite handle (or not) 404.
404
- */
483
+ * Helper for Vite development mode to let Vite handle (or not) 404.
484
+ */
405
485
  protected isViteNotFound(url?: string, route?: Route, params?: Record<string, string>): boolean;
406
486
  }
407
487
  //#endregion
408
488
  //#region ../../src/server/core/services/HttpClient.d.ts
409
489
  declare class HttpClient {
410
- protected readonly log: alepha_logger4.Logger;
490
+ protected readonly log: alepha_logger6.Logger;
411
491
  protected readonly alepha: Alepha;
412
492
  readonly cache: alepha_cache0.CachePrimitiveFn<HttpClientCache, any[]>;
413
493
  protected readonly pendingRequests: HttpClientPendingRequests;
@@ -431,18 +511,18 @@ declare class HttpClient {
431
511
  }
432
512
  interface FetchOptions<T extends TSchema = TSchema> {
433
513
  /**
434
- * Key to identify the request in the pending requests.
435
- */
514
+ * Key to identify the request in the pending requests.
515
+ */
436
516
  key?: string;
437
517
  /**
438
- * The schema to validate the response against.
439
- */
518
+ * The schema to validate the response against.
519
+ */
440
520
  schema?: {
441
521
  response?: T;
442
522
  };
443
523
  /**
444
- * Built-in cache options.
445
- */
524
+ * Built-in cache options.
525
+ */
446
526
  localCache?: boolean | number | DurationLike;
447
527
  }
448
528
  type RequestInitWithOptions<T extends TSchema = TSchema> = RequestInit & FetchOptions<T>;
@@ -558,72 +638,72 @@ declare const $action: {
558
638
  };
559
639
  interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema> extends Omit<ServerRoute, "handler" | "path" | "schema" | "mapParams"> {
560
640
  /**
561
- * Name of the action.
562
- *
563
- * - It will be used to generate the route path if `path` is not provided.
564
- * - It will be used to generate the permission name if `security` is enabled.
565
- */
641
+ * Name of the action.
642
+ *
643
+ * - It will be used to generate the route path if `path` is not provided.
644
+ * - It will be used to generate the permission name if `security` is enabled.
645
+ */
566
646
  name?: string;
567
647
  /**
568
- * Group actions together.
569
- *
570
- * - If not provided, the service name containing the route will be used.
571
- * - It will be used as Tag for documentation purposes.
572
- * - It will be used for permission name generation if `security` is enabled.
573
- *
574
- * @example
575
- * ```ts
576
- * // group = "MyController"
577
- * class MyController {
578
- * hello = $action({ handler: () => "Hello World" });
579
- * }
580
- *
581
- * // group = "users"
582
- * class MyOtherController {
583
- * group = "users";
584
- * a1 = $action({ handler: () => "Action 1", group: this.group });
585
- * a2 = $action({ handler: () => "Action 2", group: this.group });
586
- * }
587
- * ```
588
- */
648
+ * Group actions together.
649
+ *
650
+ * - If not provided, the service name containing the route will be used.
651
+ * - It will be used as Tag for documentation purposes.
652
+ * - It will be used for permission name generation if `security` is enabled.
653
+ *
654
+ * @example
655
+ * ```ts
656
+ * // group = "MyController"
657
+ * class MyController {
658
+ * hello = $action({ handler: () => "Hello World" });
659
+ * }
660
+ *
661
+ * // group = "users"
662
+ * class MyOtherController {
663
+ * group = "users";
664
+ * a1 = $action({ handler: () => "Action 1", group: this.group });
665
+ * a2 = $action({ handler: () => "Action 2", group: this.group });
666
+ * }
667
+ * ```
668
+ */
589
669
  group?: string;
590
670
  /**
591
- * Pathname of the route. If not provided, property key is used.
592
- */
671
+ * Pathname of the route. If not provided, property key is used.
672
+ */
593
673
  path?: string;
594
674
  /**
595
- * The route method.
596
- *
597
- * - If not provided, it will be set to "GET" by default.
598
- * - If not provider and a body is provided, it will be set to "POST".
599
- *
600
- * Wildcard methods are not supported for now. (e.g. "ALL", "ANY", etc.)
601
- */
675
+ * The route method.
676
+ *
677
+ * - If not provided, it will be set to "GET" by default.
678
+ * - If not provider and a body is provided, it will be set to "POST".
679
+ *
680
+ * Wildcard methods are not supported for now. (e.g. "ALL", "ANY", etc.)
681
+ */
602
682
  method?: RouteMethod;
603
683
  /**
604
- * The config schema of the route.
605
- * - body: The request body schema.
606
- * - params: Path variables schema.
607
- * - query: The request query-params schema.
608
- * - response: The response schema.
609
- */
684
+ * The config schema of the route.
685
+ * - body: The request body schema.
686
+ * - params: Path variables schema.
687
+ * - query: The request query-params schema.
688
+ * - response: The response schema.
689
+ */
610
690
  schema?: TConfig;
611
691
  /**
612
- * A short description of the action. Used for documentation purposes.
613
- */
692
+ * A short description of the action. Used for documentation purposes.
693
+ */
614
694
  description?: string;
615
695
  /**
616
- * Disable the route. Useful with env variables do disable one specific route.
617
- * Route won't be available in the API but can still be called locally!
618
- */
696
+ * Disable the route. Useful with env variables do disable one specific route.
697
+ * Route won't be available in the API but can still be called locally!
698
+ */
619
699
  disabled?: boolean;
620
700
  /**
621
- * Main route handler. This is where the route logic is implemented.
622
- */
701
+ * Main route handler. This is where the route logic is implemented.
702
+ */
623
703
  handler: ServerActionHandler<TConfig>;
624
704
  }
625
705
  declare class ActionPrimitive<TConfig extends RequestConfigSchema> extends Primitive<ActionPrimitiveOptions<TConfig>> {
626
- protected readonly log: alepha_logger4.Logger;
706
+ protected readonly log: alepha_logger6.Logger;
627
707
  protected readonly env: {
628
708
  SERVER_API_PREFIX: string;
629
709
  };
@@ -634,33 +714,33 @@ declare class ActionPrimitive<TConfig extends RequestConfigSchema> extends Primi
634
714
  get prefix(): string;
635
715
  get route(): ServerRoute;
636
716
  /**
637
- * Returns the name of the action.
638
- */
717
+ * Returns the name of the action.
718
+ */
639
719
  get name(): string;
640
720
  /**
641
- * Returns the group of the action. (e.g. "orders", "admin", etc.)
642
- */
721
+ * Returns the group of the action. (e.g. "orders", "admin", etc.)
722
+ */
643
723
  get group(): string;
644
724
  /**
645
- * Returns the HTTP method of the action.
646
- */
725
+ * Returns the HTTP method of the action.
726
+ */
647
727
  get method(): RouteMethod;
648
728
  /**
649
- * Returns the path of the action.
650
- *
651
- * Path is prefixed by `/api` by default.
652
- */
729
+ * Returns the path of the action.
730
+ *
731
+ * Path is prefixed by `/api` by default.
732
+ */
653
733
  get path(): string;
654
734
  get schema(): TConfig | undefined;
655
735
  getBodyContentType(): string | undefined;
656
736
  /**
657
- * Call the action handler directly.
658
- * There is no HTTP layer involved.
659
- */
737
+ * Call the action handler directly.
738
+ * There is no HTTP layer involved.
739
+ */
660
740
  run(config?: ClientRequestEntry<TConfig>, options?: ClientRequestOptions): Promise<ClientRequestResponse<TConfig>>;
661
741
  /**
662
- * Works like `run`, but always fetches (http request) the route.
663
- */
742
+ * Works like `run`, but always fetches (http request) the route.
743
+ */
664
744
  fetch(config?: ClientRequestEntry<TConfig>, options?: ClientRequestOptions): Promise<FetchResponse<ClientRequestResponse<TConfig>>>;
665
745
  }
666
746
  interface ActionPrimitiveFn<TConfig extends RequestConfigSchema> extends ActionPrimitive<TConfig> {
@@ -668,16 +748,17 @@ interface ActionPrimitiveFn<TConfig extends RequestConfigSchema> extends ActionP
668
748
  }
669
749
  type ClientRequestEntry<TConfig extends RequestConfigSchema, T = ClientRequestEntryContainer<TConfig>> = { [K in keyof T as T[K] extends undefined ? never : K]: T[K] };
670
750
  type ClientRequestEntryContainer<TConfig extends RequestConfigSchema> = {
671
- body: TConfig["body"] extends TObject ? Static<TConfig["body"]> : undefined;
751
+ body: TConfig["body"] extends TRequestBody ? Static<TConfig["body"]> : undefined;
672
752
  params: TConfig["params"] extends TObject ? Static<TConfig["params"]> : undefined;
673
- headers?: TConfig["headers"] extends TObject ? Static<TConfig["headers"]> : undefined;
674
- query?: TConfig["query"] extends TObject ? Partial<Static<TConfig["query"]>> : undefined;
753
+ headers?: TConfig["headers"] extends TObject ? Static<TConfig["headers"]> : Record<string, string>;
754
+ query?: TConfig["query"] extends TObject ? Partial<Static<TConfig["query"]>> : Record<string, string>;
675
755
  };
676
756
  interface ClientRequestOptions extends FetchOptions {
677
757
  /**
678
- * Standard request fetch options.
679
- */
758
+ * Standard request fetch options.
759
+ */
680
760
  request?: RequestInit;
761
+ query?: Record<string, string | number | boolean>;
681
762
  }
682
763
  type ClientRequestResponse<TConfig extends RequestConfigSchema> = TConfig["response"] extends TSchema ? Static<TConfig["response"]> : any;
683
764
  /**
@@ -771,7 +852,7 @@ declare module "alepha" {
771
852
  declare class BunHttpServerProvider extends ServerProvider {
772
853
  protected readonly alepha: Alepha;
773
854
  protected readonly dateTimeProvider: DateTimeProvider;
774
- protected readonly log: alepha_logger4.Logger;
855
+ protected readonly log: alepha_logger6.Logger;
775
856
  protected readonly env: {
776
857
  SERVER_PORT: number;
777
858
  SERVER_HOST: string;
@@ -796,14 +877,33 @@ declare module "alepha" {
796
877
  declare class NodeHttpServerProvider extends ServerProvider {
797
878
  protected readonly alepha: Alepha;
798
879
  protected readonly dateTimeProvider: DateTimeProvider;
799
- protected readonly log: alepha_logger4.Logger;
880
+ protected readonly log: alepha_logger6.Logger;
800
881
  protected readonly env: {
801
882
  SERVER_PORT: number;
802
883
  SERVER_HOST: string;
803
884
  };
804
885
  protected readonly router: ServerRouterProvider;
886
+ /**
887
+ * Track active connections for fast shutdown.
888
+ */
889
+ protected readonly connections: Set<Socket>;
890
+ /**
891
+ * Get number of active connections.
892
+ */
893
+ getConnectionsCount(): number;
894
+ /**
895
+ * Server options.
896
+ */
897
+ readonly options: {
898
+ /**
899
+ * Graceful shutdown timeout in ms.
900
+ * After this, remaining connections are forcefully closed.
901
+ * @default 30000
902
+ */
903
+ shutdownTimeout: number;
904
+ };
805
905
  get hostname(): string;
806
- protected readonly handleRequestError: (res: node_http0.ServerResponse, err: Error) => void;
906
+ protected readonly handleRequestError: (res: ServerResponse$1, err: Error) => void;
807
907
  protected readonly nodeRequestEvent: {
808
908
  req: IncomingMessage;
809
909
  res: ServerResponse$1;
@@ -814,11 +914,12 @@ declare class NodeHttpServerProvider extends ServerProvider {
814
914
  protected readonly stop: alepha19.HookPrimitive<"stop">;
815
915
  protected listen(): Promise<void>;
816
916
  protected close(): Promise<void>;
917
+ protected destroyAllConnections(): void;
817
918
  }
818
919
  //#endregion
819
920
  //#region ../../src/server/core/providers/ServerLoggerProvider.d.ts
820
921
  declare class ServerLoggerProvider {
821
- protected readonly log: alepha_logger4.Logger;
922
+ protected readonly log: alepha_logger6.Logger;
822
923
  protected readonly alepha: Alepha;
823
924
  readonly onRequest: alepha19.HookPrimitive<"server:onRequest">;
824
925
  readonly onError: alepha19.HookPrimitive<"server:onError">;
@@ -894,17 +995,27 @@ declare module "alepha" {
894
995
  }
895
996
  }
896
997
  /**
897
- * Provides high-performance HTTP server capabilities with declarative routing and action primitives.
998
+ * | type | quality | stability |
999
+ * |------|---------|-----------|
1000
+ * | backend | epic | stable |
898
1001
  *
899
- * The server module enables building REST APIs and web applications using `$route` and `$action` primitives
900
- * on class properties. It provides automatic request/response handling, schema validation, middleware support,
901
- * and seamless integration with other Alepha modules for a complete backend solution.
1002
+ * Convention-driven HTTP server with automatic validation and type inference.
1003
+ *
1004
+ * **Features:**
1005
+ * - Type-safe API endpoints with schema validation
1006
+ * - Lower-level HTTP route definitions
1007
+ * - Automatic request/response validation via TypeBox
1008
+ * - Convention-based URL generation (`/api/{ActionName}`)
1009
+ * - Direct invocation (`run()`) or HTTP (`fetch()`)
1010
+ * - Built-in authentication integration
1011
+ * - Multipart file upload handling
1012
+ * - Content-type auto-negotiation (JSON, form-data, text)
1013
+ * - HTTP methods: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
1014
+ * - Error handling: BadRequestError, ValidationError, ForbiddenError, UnauthorizedError, ConflictError, NotFoundError
902
1015
  *
903
- * @see {@link $route}
904
- * @see {@link $action}
905
1016
  * @module alepha.server
906
1017
  */
907
1018
  declare const AlephaServer: alepha19.Service<alepha19.Module>;
908
1019
  //#endregion
909
- export { $action, $route, ActionPrimitive, ActionPrimitiveFn, ActionPrimitiveOptions, AlephaServer, BadRequestError, BunHttpServerProvider, ClientRequestEntry, ClientRequestEntryContainer, ClientRequestOptions, ClientRequestResponse, ConflictError, ErrorSchema, FetchActionArgs, FetchOptions, FetchResponse, ForbiddenError, HttpAction, HttpClient, HttpClientPendingRequests, HttpError, HttpErrorLike, NodeHttpServerProvider, NodeRequestEvent, NotFoundError, Ok, RequestConfigSchema, RequestInitWithOptions, ResponseBodyType, ResponseKind, RouteMethod, RoutePrimitive, RoutePrimitiveOptions, ServerActionHandler, ServerActionRequest, ServerHandler, ServerLoggerProvider, ServerNotReadyProvider, ServerProvider, ServerRawRequest, ServerReply, ServerRequest, ServerRequestConfig, ServerRequestConfigEntry, ServerRequestData, ServerResponse, ServerResponseBody, ServerRoute, ServerRouteMatcher, ServerRouteRequestHandler, ServerRouterProvider, ServerTimingProvider, TRequestBody, TResponseBody, UnauthorizedError, UserAgentInfo, UserAgentParser, ValidationError, WebRequestEvent, errorNameByStatus, errorSchema, isHttpError, isMultipart, okSchema, routeMethods };
1020
+ export { $action, $route, ActionPrimitive, ActionPrimitiveFn, ActionPrimitiveOptions, AlephaServer, BadRequestError, BunHttpServerProvider, ClientRequestEntry, ClientRequestEntryContainer, ClientRequestOptions, ClientRequestResponse, ConflictError, ErrorSchema, FetchActionArgs, FetchOptions, FetchResponse, ForbiddenError, HttpAction, HttpClient, HttpClientPendingRequests, HttpError, HttpErrorLike, NodeHttpServerProvider, NodeRequestEvent, NotFoundError, Ok, RequestConfigSchema, RequestGeo, RequestInitWithOptions, RequestReferer, ResponseBodyType, ResponseKind, RouteMethod, RoutePrimitive, RoutePrimitiveOptions, ServerActionHandler, ServerActionRequest, ServerHandler, ServerLoggerProvider, ServerNotReadyProvider, ServerProvider, ServerRawRequest, ServerReply, ServerRequest, ServerRequestConfig, ServerRequestConfigEntry, ServerRequestData, ServerResponse, ServerResponseBody, ServerRoute, ServerRouteMatcher, ServerRouteRequestHandler, ServerRouterProvider, ServerTimingProvider, TRequestBody, TResponseBody, UnauthorizedError, UserAgentInfo, UserAgentParser, ValidationError, WebRequestEvent, errorNameByStatus, errorSchema, isHttpError, isMultipart, okSchema, routeMethods };
910
1021
  //# sourceMappingURL=index.d.ts.map