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,14 +1,32 @@
1
- import { $inject, Alepha } from "alepha";
1
+ import { $env, $inject, Alepha, t } from "alepha";
2
2
  import { ServerReply } from "../helpers/ServerReply.ts";
3
3
  import type {
4
+ RequestGeo,
5
+ RequestReferer,
4
6
  ServerRequest,
5
7
  ServerRequestData,
6
8
  } from "../interfaces/ServerRequest.ts";
7
9
  import { UserAgentParser } from "./UserAgentParser.ts";
8
10
 
11
+ const envSchema = t.object({
12
+ /**
13
+ * Trust proxy headers (X-Forwarded-For, X-Real-IP) for client IP resolution.
14
+ *
15
+ * Default: true (modern deployments are typically behind a reverse proxy)
16
+ *
17
+ * Set to false only if your server accepts direct connections without a proxy
18
+ * and you want to use the raw connection IP.
19
+ */
20
+ TRUST_PROXY: t.boolean({
21
+ default: true,
22
+ description: "Trust proxy headers for client IP",
23
+ }),
24
+ });
25
+
9
26
  export class ServerRequestParser {
10
27
  protected readonly alepha = $inject(Alepha);
11
28
  protected readonly userAgentParser = $inject(UserAgentParser);
29
+ protected readonly env = $env(envSchema);
12
30
 
13
31
  public createServerRequest(rawRequest: ServerRequestData): ServerRequest {
14
32
  const self = this;
@@ -30,6 +48,24 @@ export class ServerRequestParser {
30
48
  get userAgent() {
31
49
  return self.getRequestUserAgent(rawRequest);
32
50
  },
51
+ get geo() {
52
+ return self.getRequestGeo(rawRequest);
53
+ },
54
+ get isBot() {
55
+ return self.getIsBot(rawRequest);
56
+ },
57
+ get isMobile() {
58
+ return self.getIsMobile(rawRequest);
59
+ },
60
+ get protocol() {
61
+ return self.getProtocol(rawRequest);
62
+ },
63
+ get language() {
64
+ return self.getLanguage(rawRequest);
65
+ },
66
+ get referer() {
67
+ return self.getReferer(rawRequest);
68
+ },
33
69
  } as ServerRequest;
34
70
  }
35
71
 
@@ -42,22 +78,279 @@ export class ServerRequestParser {
42
78
  }
43
79
 
44
80
  public getRequestIp(request: ServerRequestData): string | undefined {
45
- // check for the 'x-forwarded-for' header first, which is commonly used
46
- // in proxy setups to forward the original client's IP address.
81
+ // Only trust proxy headers when explicitly configured
82
+ if (this.env.TRUST_PROXY) {
83
+ const headers = request.headers;
84
+
85
+ // X-Forwarded-For: standard proxy header (Cloudflare, Vercel, Nginx, etc.)
86
+ const forwardedFor = headers["x-forwarded-for"];
87
+ if (forwardedFor) {
88
+ return Array.isArray(forwardedFor)
89
+ ? forwardedFor[0]
90
+ : forwardedFor.split(",")[0].trim();
91
+ }
92
+
93
+ // X-Real-IP: alternative proxy header
94
+ const xRealIP = headers["x-real-ip"];
95
+ if (xRealIP) {
96
+ return Array.isArray(xRealIP) ? xRealIP[0] : xRealIP;
97
+ }
98
+ }
47
99
 
48
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For
100
+ // Default: use raw connection IP
101
+ return this.getConnectionIp(request);
102
+ }
49
103
 
50
- const forwardedFor = request.headers["x-forwarded-for"];
51
- if (forwardedFor) {
52
- // The 'x-forwarded-for' header can contain multiple IPs, so we take the first one.
53
- return Array.isArray(forwardedFor)
54
- ? forwardedFor[0]
55
- : forwardedFor.split(",")[0].trim();
104
+ protected getConnectionIp(request: ServerRequestData): string | undefined {
105
+ // Get IP from raw connection (Node.js socket)
106
+ const nodeReq = request.raw.node?.req;
107
+ if (nodeReq) {
108
+ return nodeReq.socket?.remoteAddress;
56
109
  }
110
+ return undefined;
111
+ }
112
+
113
+ // ─────────────────────────────────────────────────────────────────────────────
114
+ // Geolocation
115
+ // ─────────────────────────────────────────────────────────────────────────────
116
+
117
+ public getRequestGeo(request: ServerRequestData): RequestGeo {
118
+ const headers = request.headers;
119
+
120
+ return {
121
+ // Country: Cloudflare, Vercel, AWS CloudFront
122
+ country:
123
+ headers["cf-ipcountry"] ||
124
+ headers["x-vercel-ip-country"] ||
125
+ headers["cloudfront-viewer-country"],
126
+
127
+ // City: Cloudflare, Vercel
128
+ city: headers["cf-ipcity"] || headers["x-vercel-ip-city"],
129
+
130
+ // Region: Cloudflare, Vercel
131
+ region:
132
+ headers["cf-region"] ||
133
+ headers["cf-region-code"] ||
134
+ headers["x-vercel-ip-country-region"],
135
+
136
+ // Coordinates: Cloudflare, Vercel
137
+ latitude: headers["cf-iplatitude"] || headers["x-vercel-ip-latitude"],
138
+ longitude: headers["cf-iplongitude"] || headers["x-vercel-ip-longitude"],
139
+ };
140
+ }
141
+
142
+ // ─────────────────────────────────────────────────────────────────────────────
143
+ // Bot detection
144
+ // ─────────────────────────────────────────────────────────────────────────────
145
+
146
+ protected static readonly BOT_PATTERNS = [
147
+ /bot/i,
148
+ /crawl/i,
149
+ /spider/i,
150
+ /slurp/i,
151
+ /googlebot/i,
152
+ /bingbot/i,
153
+ /yandex/i,
154
+ /baiduspider/i,
155
+ /facebookexternalhit/i,
156
+ /twitterbot/i,
157
+ /linkedinbot/i,
158
+ /whatsapp/i,
159
+ /telegrambot/i,
160
+ /discordbot/i,
161
+ /slackbot/i,
162
+ /applebot/i,
163
+ /duckduckbot/i,
164
+ /semrush/i,
165
+ /ahrefsbot/i,
166
+ /mj12bot/i,
167
+ /dotbot/i,
168
+ /petalbot/i,
169
+ /bytespider/i,
170
+ /gptbot/i,
171
+ /claudebot/i,
172
+ /anthropic/i,
173
+ /curl/i,
174
+ /wget/i,
175
+ /python-requests/i,
176
+ /axios/i,
177
+ /node-fetch/i,
178
+ /go-http-client/i,
179
+ /java\//i,
180
+ /libwww/i,
181
+ /httpunit/i,
182
+ /nutch/i,
183
+ /phpcrawl/i,
184
+ /biglotron/i,
185
+ /teoma/i,
186
+ /convera/i,
187
+ /gigablast/i,
188
+ /ia_archiver/i,
189
+ /webmon/i,
190
+ /httrack/i,
191
+ /grub\.org/i,
192
+ /netresearchserver/i,
193
+ /speedy/i,
194
+ /fluffy/i,
195
+ /findlink/i,
196
+ /panscient/i,
197
+ /ips-agent/i,
198
+ /yanga/i,
199
+ /cyberpatrol/i,
200
+ /postrank/i,
201
+ /page2rss/i,
202
+ /linkdex/i,
203
+ /ezooms/i,
204
+ /heritrix/i,
205
+ /findthatfile/i,
206
+ /europarchive\.org/i,
207
+ /mappydata/i,
208
+ /eright/i,
209
+ /apercite/i,
210
+ /aboundex/i,
211
+ /domaincrawler/i,
212
+ /wbsearchbot/i,
213
+ /summify/i,
214
+ /ccbot/i,
215
+ /edisterbot/i,
216
+ /seznambot/i,
217
+ /ec2linkfinder/i,
218
+ /gslfbot/i,
219
+ /aihitbot/i,
220
+ /intelium_bot/i,
221
+ /yeti/i,
222
+ /retrevopageanalyzer/i,
223
+ /lb-spider/i,
224
+ /sogou/i,
225
+ /lssbot/i,
226
+ /careerbot/i,
227
+ /wotbox/i,
228
+ /wocbot/i,
229
+ /ichiro/i,
230
+ /duckduckgo/i,
231
+ /lssrocketcrawler/i,
232
+ /drupact/i,
233
+ /webcompanycrawler/i,
234
+ /acoonbot/i,
235
+ /openindexspider/i,
236
+ /screaming frog/i,
237
+ /pingdom/i,
238
+ /uptimerobot/i,
239
+ /headlesschrome/i,
240
+ /phantomjs/i,
241
+ /prerender/i,
242
+ /lighthouse/i,
243
+ /pagespeed/i,
244
+ ];
245
+
246
+ public getIsBot(request: ServerRequestData): boolean {
247
+ const ua = request.headers["user-agent"];
248
+ if (!ua) return false;
249
+
250
+ return ServerRequestParser.BOT_PATTERNS.some((pattern) => pattern.test(ua));
251
+ }
252
+
253
+ // ─────────────────────────────────────────────────────────────────────────────
254
+ // Mobile detection
255
+ // ─────────────────────────────────────────────────────────────────────────────
256
+
257
+ protected static readonly MOBILE_PATTERNS = [
258
+ /android/i,
259
+ /webos/i,
260
+ /iphone/i,
261
+ /ipad/i,
262
+ /ipod/i,
263
+ /blackberry/i,
264
+ /iemobile/i,
265
+ /opera mini/i,
266
+ /mobile/i,
267
+ /tablet/i,
268
+ /kindle/i,
269
+ /silk/i,
270
+ /fennec/i,
271
+ /windows phone/i,
272
+ /windows ce/i,
273
+ /symbian/i,
274
+ /palm/i,
275
+ /webmate/i,
276
+ ];
277
+
278
+ public getIsMobile(request: ServerRequestData): boolean {
279
+ const ua = request.headers["user-agent"];
280
+ if (!ua) return false;
281
+
282
+ return ServerRequestParser.MOBILE_PATTERNS.some((pattern) =>
283
+ pattern.test(ua),
284
+ );
285
+ }
286
+
287
+ // ─────────────────────────────────────────────────────────────────────────────
288
+ // Protocol detection
289
+ // ─────────────────────────────────────────────────────────────────────────────
290
+
291
+ public getProtocol(request: ServerRequestData): "http" | "https" {
292
+ // Check proxy headers first
293
+ const forwardedProto = request.headers["x-forwarded-proto"];
294
+ if (forwardedProto) {
295
+ return forwardedProto.toLowerCase() === "https" ? "https" : "http";
296
+ }
297
+
298
+ // Cloudflare-specific header
299
+ const cfVisitorHeader = request.headers["cf-visitor"];
300
+ if (cfVisitorHeader) {
301
+ try {
302
+ const parsed = JSON.parse(cfVisitorHeader);
303
+ if (parsed.scheme === "https") return "https";
304
+ } catch {
305
+ // Ignore parse errors
306
+ }
307
+ }
308
+
309
+ // Check URL scheme
310
+ if (request.url.protocol === "https:") {
311
+ return "https";
312
+ }
313
+
314
+ return "http";
315
+ }
316
+
317
+ // ─────────────────────────────────────────────────────────────────────────────
318
+ // Language detection
319
+ // ─────────────────────────────────────────────────────────────────────────────
320
+
321
+ public getLanguage(request: ServerRequestData): string | undefined {
322
+ const acceptLanguage = request.headers["accept-language"];
323
+ if (!acceptLanguage) return undefined;
324
+
325
+ // Parse Accept-Language header
326
+ // Format: "en-US,en;q=0.9,fr;q=0.8"
327
+ const firstLang = acceptLanguage.split(",")[0];
328
+ if (!firstLang) return undefined;
329
+
330
+ // Remove quality value if present (e.g., "en;q=0.9" -> "en")
331
+ const lang = firstLang.split(";")[0].trim();
332
+
333
+ return lang || undefined;
334
+ }
335
+
336
+ // ─────────────────────────────────────────────────────────────────────────────
337
+ // Referer parsing
338
+ // ─────────────────────────────────────────────────────────────────────────────
339
+
340
+ public getReferer(request: ServerRequestData): RequestReferer | undefined {
341
+ const referer = request.headers.referer || request.headers.referrer;
342
+ if (!referer) return undefined;
57
343
 
58
- const xRealIP = request.headers["x-real-ip"];
59
- if (xRealIP) {
60
- return Array.isArray(xRealIP) ? xRealIP[0] : xRealIP;
344
+ try {
345
+ const url = new URL(referer);
346
+ return {
347
+ url: referer,
348
+ hostname: url.hostname,
349
+ pathname: url.pathname,
350
+ };
351
+ } catch {
352
+ // Invalid URL
353
+ return undefined;
61
354
  }
62
355
  }
63
356
  }
@@ -25,30 +25,16 @@ declare module "alepha/server" {
25
25
  // ---------------------------------------------------------------------------------------------------------------------
26
26
 
27
27
  /**
28
- * Plugin for configuring CORS on the Alepha server.
28
+ * | type | quality | stability |
29
+ * |------|---------|-----------|
30
+ * | backend | standard | stable |
29
31
  *
30
- * @example
31
- * ```ts
32
- * import { Alepha, $route } from "alepha";
33
- * import { AlephaServerCors, $cors } from "alepha/server-cors";
32
+ * Cross-Origin Resource Sharing configuration.
34
33
  *
35
- * class ApiService {
36
- * // Global CORS is applied via corsOptions atom
34
+ * **Features:**
35
+ * - CORS policy definition
37
36
  *
38
- * // Path-specific CORS for API routes
39
- * apiCors = $cors({
40
- * paths: ["/api/*"],
41
- * origin: "https://app.example.com",
42
- * credentials: true,
43
- * });
44
- *
45
- * route = $route({
46
- * path: "/api/data",
47
- * method: "POST",
48
- * handler: () => ({ data: "hello" }),
49
- * });
50
- * }
51
- * ```
37
+ * @module alepha.server.cors
52
38
  */
53
39
  export const AlephaServerCors = $module({
54
40
  name: "alepha.server.cors",
@@ -25,9 +25,13 @@ export const $cors = (options: CorsPrimitiveConfig): AbstractCorsPrimitive => {
25
25
  // ---------------------------------------------------------------------------------------------------------------------
26
26
 
27
27
  export interface CorsPrimitiveConfig extends Partial<CorsOptions> {
28
- /** Name identifier for this CORS config (default: property key) */
28
+ /**
29
+ * Name identifier for this CORS config (default: property key).
30
+ */
29
31
  name?: string;
30
- /** Path patterns to match (supports wildcards like /api/*) */
32
+ /**
33
+ * Path patterns to match (supports wildcards like /api/*).
34
+ */
31
35
  paths?: string[];
32
36
  }
33
37
 
@@ -10,9 +10,15 @@ export * from "./schemas/healthSchema.ts";
10
10
  // ---------------------------------------------------------------------------------------------------------------------
11
11
 
12
12
  /**
13
- * Plugin for Alepha Server that provides health-check endpoints.
13
+ * | type | quality | stability |
14
+ * |------|---------|-----------|
15
+ * | devops | standard | stable |
16
+ *
17
+ * Application health monitoring endpoints.
18
+ *
19
+ * **Features:**
20
+ * - `GET /health` endpoint
14
21
  *
15
- * @see {@link ServerHealthProvider}
16
22
  * @module alepha.server.health
17
23
  */
18
24
  export const AlephaServerHealth = $module({
@@ -9,10 +9,18 @@ export * from "./providers/ServerHelmetProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * Automatically adds important HTTP security headers to every response
13
- * to help protect your application from common web vulnerabilities.
12
+ * | type | quality | stability |
13
+ * |------|---------|-----------|
14
+ * | backend | standard | stable |
15
+ *
16
+ * HTTP security headers.
17
+ *
18
+ * **Features:**
19
+ * - X-Frame-Options
20
+ * - X-Content-Type-Options
21
+ * - Content-Security-Policy
22
+ * - Other security headers
14
23
  *
15
- * @see {@link ServerHelmetProvider}
16
24
  * @module alepha.server.helmet
17
25
  */
18
26
  export const AlephaServerHelmet = $module({
@@ -0,0 +1,7 @@
1
+ import { $atom, t } from "alepha";
2
+ import { apiLinksResponseSchema } from "../schemas/apiLinksResponseSchema.ts";
3
+
4
+ export const apiLinksAtom = $atom({
5
+ name: "alepha.server.request.apiLinks",
6
+ schema: t.optional(apiLinksResponseSchema),
7
+ });
@@ -1,4 +1,5 @@
1
1
  import { $module } from "alepha";
2
+ import { apiLinksAtom } from "./atoms/apiLinksAtom.ts";
2
3
  import { $client } from "./primitives/$client.ts";
3
4
  import { $remote } from "./primitives/$remote.ts";
4
5
  import { LinkProvider } from "./providers/LinkProvider.ts";
@@ -14,6 +15,7 @@ export * from "./schemas/apiLinksResponseSchema.ts";
14
15
 
15
16
  export const AlephaServerLinks = $module({
16
17
  name: "alepha.server.links",
18
+ atoms: [apiLinksAtom],
17
19
  primitives: [$remote, $client],
18
20
  services: [LinkProvider],
19
21
  });
@@ -1,6 +1,7 @@
1
1
  import "alepha/security";
2
2
  import { $module } from "alepha";
3
3
  import { AlephaServer } from "alepha/server";
4
+ import { apiLinksAtom } from "./atoms/apiLinksAtom.ts";
4
5
  import { $client } from "./primitives/$client.ts";
5
6
  import { $remote } from "./primitives/$remote.ts";
6
7
  import { LinkProvider } from "./providers/LinkProvider.ts";
@@ -34,18 +35,24 @@ declare module "alepha" {
34
35
  // ---------------------------------------------------------------------------------------------------------------------
35
36
 
36
37
  /**
37
- * Provides server-side link management and remote capabilities for client-server interactions.
38
+ * | type | quality | stability |
39
+ * |------|---------|-----------|
40
+ * | backend | standard | stable |
38
41
  *
39
- * The server-links module enables declarative link definitions using `$remote` and `$client` primitives,
40
- * facilitating seamless API endpoint management and client-server communication. It integrates with server
41
- * security features to ensure safe and controlled access to resources.
42
+ * Type-safe API client with request deduplication.
43
+ *
44
+ * **Features:**
45
+ * - Virtual HTTP client for type-safe API calls
46
+ * - Remote action definitions
47
+ * - Type inference from action schemas
48
+ * - Request deduplication
49
+ * - Automatic error handling
42
50
  *
43
- * @see {@link $remote}
44
- * @see {@link $client}
45
51
  * @module alepha.server.links
46
52
  */
47
53
  export const AlephaServerLinks = $module({
48
54
  name: "alepha.server.links",
55
+ atoms: [apiLinksAtom],
49
56
  primitives: [$remote, $client],
50
57
  services: [
51
58
  AlephaServer,
@@ -9,10 +9,17 @@ export * from "./providers/ServerMetricsProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * This module provides prometheus metrics for the Alepha server.
13
- * Metrics are exposed at the `/metrics` endpoint.
12
+ * | type | quality | stability |
13
+ * |------|---------|-----------|
14
+ * | devops | standard | stable |
15
+ *
16
+ * Prometheus-style metrics collection.
17
+ *
18
+ * **Features:**
19
+ * - Prometheus-style metrics
20
+ * - Custom metric registration
21
+ * - Metric exposition endpoint
14
22
  *
15
- * @see {@link ServerMetricsProvider}
16
23
  * @module alepha.server.metrics
17
24
  */
18
25
  export const AlephaServerMetrics = $module({
@@ -9,10 +9,16 @@ export * from "./providers/ServerMultipartProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * This module provides support for handling multipart/form-data requests.
13
- * It allows to parse body data containing t.file().
12
+ * | type | quality | stability |
13
+ * |------|---------|-----------|
14
+ * | backend | standard | stable |
15
+ *
16
+ * Multipart form data handling for file uploads.
17
+ *
18
+ * **Features:**
19
+ * - File upload parsing
20
+ * - Form field extraction
14
21
  *
15
- * @see {@link ServerMultipartProvider}
16
22
  * @module alepha.server.multipart
17
23
  */
18
24
  export const AlephaServerMultipart = $module({
@@ -11,9 +11,15 @@ export * from "./providers/ServerProxyProvider.ts";
11
11
  // ---------------------------------------------------------------------------------------------------------------------
12
12
 
13
13
  /**
14
- * Plugin for Alepha that provides a proxy server functionality.
14
+ * | type | quality | stability |
15
+ * |------|---------|-----------|
16
+ * | backend | standard | stable |
17
+ *
18
+ * Reverse proxy routing.
19
+ *
20
+ * **Features:**
21
+ * - Proxy configuration and routing
15
22
  *
16
- * @see {@link $proxy}
17
23
  * @module alepha.server.proxy
18
24
  */
19
25
  export const AlephaServerProxy = $module({
@@ -31,42 +31,38 @@ declare module "alepha/server" {
31
31
  // ---------------------------------------------------------------------------------------------------------------------
32
32
 
33
33
  export interface RateLimitOptions {
34
- /** Maximum number of requests per window (default: 100) */
34
+ /**
35
+ * Maximum number of requests per window (default: 100).
36
+ */
35
37
  max?: number;
36
- /** Window duration in milliseconds (default: 15 minutes) */
38
+ /**
39
+ * Window duration in milliseconds (default: 15 minutes).
40
+ */
37
41
  windowMs?: number;
38
- /** Custom key generator function */
42
+ /**
43
+ * Custom key generator function.
44
+ */
39
45
  keyGenerator?: (req: any) => string;
40
- /** Skip rate limiting for failed requests */
46
+ /**
47
+ * Skip rate limiting for failed requests.
48
+ */
41
49
  skipFailedRequests?: boolean;
42
- /** Skip rate limiting for successful requests */
50
+ /**
51
+ * Skip rate limiting for successful requests.
52
+ */
43
53
  skipSuccessfulRequests?: boolean;
44
54
  }
45
55
 
46
56
  /**
47
- * Provides rate limiting capabilities for server routes and actions with configurable limits and windows.
57
+ * | type | quality | stability |
58
+ * |------|---------|-----------|
59
+ * | backend | standard | stable |
48
60
  *
49
- * The server-rate-limit module enables per-route and per-action rate limiting using either:
50
- * - The `$rateLimit` primitive with `paths` option for path-based rate limiting
51
- * - The `rateLimit` option in action primitives for action-specific limiting
61
+ * Request rate limiting on actions.
52
62
  *
53
- * It offers sliding window rate limiting, custom key generation, and seamless integration with server routes.
63
+ * **Features:**
64
+ * - Rate limit configuration per action
54
65
  *
55
- * @example
56
- * ```ts
57
- * import { $rateLimit, AlephaServerRateLimit } from "alepha/server/rate-limit";
58
- *
59
- * class ApiService {
60
- * // Path-specific rate limiting
61
- * apiRateLimit = $rateLimit({
62
- * paths: ["/api/*"],
63
- * max: 100,
64
- * windowMs: 15 * 60 * 1000, // 15 minutes
65
- * });
66
- * }
67
- * ```
68
- *
69
- * @see {@link $rateLimit}
70
66
  * @module alepha.server.rate-limit
71
67
  */
72
68
  export const AlephaServerRateLimit = $module({
@@ -41,9 +41,13 @@ export const $rateLimit = (
41
41
  // ---------------------------------------------------------------------------------------------------------------------
42
42
 
43
43
  export interface RateLimitPrimitiveOptions extends RateLimitOptions {
44
- /** Name identifier for this rate limit (default: property key) */
44
+ /**
45
+ * Name identifier for this rate limit (default: property key).
46
+ */
45
47
  name?: string;
46
- /** Path patterns to match (supports wildcards like /api/*) */
48
+ /**
49
+ * Path patterns to match (supports wildcards like /api/*).
50
+ */
47
51
  paths?: string[];
48
52
  }
49
53