@morojs/moro 1.5.16 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/README.md +70 -269
  2. package/dist/core/auth/morojs-adapter.js +5 -9
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.d.ts +1 -1
  5. package/dist/core/config/config-manager.js +10 -20
  6. package/dist/core/config/config-manager.js.map +1 -1
  7. package/dist/core/config/config-sources.d.ts +2 -2
  8. package/dist/core/config/config-sources.js +17 -20
  9. package/dist/core/config/config-sources.js.map +1 -1
  10. package/dist/core/config/config-validator.d.ts +1 -1
  11. package/dist/core/config/config-validator.js +33 -10
  12. package/dist/core/config/config-validator.js.map +1 -1
  13. package/dist/core/config/file-loader.d.ts +1 -1
  14. package/dist/core/config/file-loader.js +19 -78
  15. package/dist/core/config/file-loader.js.map +1 -1
  16. package/dist/core/config/index.d.ts +8 -8
  17. package/dist/core/config/index.js +25 -51
  18. package/dist/core/config/index.js.map +1 -1
  19. package/dist/core/config/schema.d.ts +2 -2
  20. package/dist/core/config/schema.js +11 -13
  21. package/dist/core/config/schema.js.map +1 -1
  22. package/dist/core/config/utils.d.ts +1 -1
  23. package/dist/core/config/utils.js +18 -32
  24. package/dist/core/config/utils.js.map +1 -1
  25. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  26. package/dist/core/database/adapters/drizzle.js +18 -11
  27. package/dist/core/database/adapters/drizzle.js.map +1 -1
  28. package/dist/core/database/adapters/index.d.ts +7 -7
  29. package/dist/core/database/adapters/index.js +19 -29
  30. package/dist/core/database/adapters/index.js.map +1 -1
  31. package/dist/core/database/adapters/mongodb.d.ts +3 -1
  32. package/dist/core/database/adapters/mongodb.js +23 -8
  33. package/dist/core/database/adapters/mongodb.js.map +1 -1
  34. package/dist/core/database/adapters/mysql.d.ts +3 -1
  35. package/dist/core/database/adapters/mysql.js +18 -9
  36. package/dist/core/database/adapters/mysql.js.map +1 -1
  37. package/dist/core/database/adapters/postgresql.d.ts +3 -1
  38. package/dist/core/database/adapters/postgresql.js +18 -8
  39. package/dist/core/database/adapters/postgresql.js.map +1 -1
  40. package/dist/core/database/adapters/redis.d.ts +3 -1
  41. package/dist/core/database/adapters/redis.js +34 -9
  42. package/dist/core/database/adapters/redis.js.map +1 -1
  43. package/dist/core/database/adapters/sqlite.d.ts +3 -1
  44. package/dist/core/database/adapters/sqlite.js +19 -8
  45. package/dist/core/database/adapters/sqlite.js.map +1 -1
  46. package/dist/core/database/index.d.ts +2 -2
  47. package/dist/core/database/index.js +2 -18
  48. package/dist/core/database/index.js.map +1 -1
  49. package/dist/core/docs/index.d.ts +9 -9
  50. package/dist/core/docs/index.js +14 -35
  51. package/dist/core/docs/index.js.map +1 -1
  52. package/dist/core/docs/openapi-generator.d.ts +2 -2
  53. package/dist/core/docs/openapi-generator.js +11 -16
  54. package/dist/core/docs/openapi-generator.js.map +1 -1
  55. package/dist/core/docs/schema-to-openapi.d.ts +2 -2
  56. package/dist/core/docs/schema-to-openapi.js +5 -11
  57. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  58. package/dist/core/docs/simple-docs.d.ts +1 -1
  59. package/dist/core/docs/simple-docs.js +4 -9
  60. package/dist/core/docs/simple-docs.js.map +1 -1
  61. package/dist/core/docs/swagger-ui.d.ts +2 -2
  62. package/dist/core/docs/swagger-ui.js +26 -29
  63. package/dist/core/docs/swagger-ui.js.map +1 -1
  64. package/dist/core/docs/zod-to-openapi.js +31 -28
  65. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  66. package/dist/core/events/event-bus.d.ts +1 -1
  67. package/dist/core/events/event-bus.js +6 -10
  68. package/dist/core/events/event-bus.js.map +1 -1
  69. package/dist/core/events/index.d.ts +2 -2
  70. package/dist/core/events/index.js +1 -5
  71. package/dist/core/events/index.js.map +1 -1
  72. package/dist/core/framework.d.ts +16 -6
  73. package/dist/core/framework.js +182 -92
  74. package/dist/core/framework.js.map +1 -1
  75. package/dist/core/http/http-server.d.ts +1 -1
  76. package/dist/core/http/http-server.js +26 -209
  77. package/dist/core/http/http-server.js.map +1 -1
  78. package/dist/core/http/index.d.ts +4 -3
  79. package/dist/core/http/index.js +3 -8
  80. package/dist/core/http/index.js.map +1 -1
  81. package/dist/core/http/router.d.ts +1 -1
  82. package/dist/core/http/router.js +3 -7
  83. package/dist/core/http/router.js.map +1 -1
  84. package/dist/core/http/uws-http-server.d.ts +64 -0
  85. package/dist/core/http/uws-http-server.js +688 -0
  86. package/dist/core/http/uws-http-server.js.map +1 -0
  87. package/dist/core/logger/filters.d.ts +1 -1
  88. package/dist/core/logger/filters.js +8 -19
  89. package/dist/core/logger/filters.js.map +1 -1
  90. package/dist/core/logger/index.d.ts +3 -3
  91. package/dist/core/logger/index.js +2 -25
  92. package/dist/core/logger/index.js.map +1 -1
  93. package/dist/core/logger/logger.d.ts +1 -1
  94. package/dist/core/logger/logger.js +21 -23
  95. package/dist/core/logger/logger.js.map +1 -1
  96. package/dist/core/logger/outputs.d.ts +1 -1
  97. package/dist/core/logger/outputs.js +8 -15
  98. package/dist/core/logger/outputs.js.map +1 -1
  99. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  100. package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
  101. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  102. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  103. package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
  104. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  105. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  106. package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
  107. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  108. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
  109. package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
  110. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  111. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  112. package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
  113. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  114. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  115. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
  116. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  117. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
  118. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
  119. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  120. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  121. package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
  122. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
  123. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  124. package/dist/core/middleware/built-in/adapters/index.js +4 -23
  125. package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
  126. package/dist/core/middleware/built-in/auth-helpers.js +11 -22
  127. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
  129. package/dist/core/middleware/built-in/auth-providers.js +4 -9
  130. package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
  131. package/dist/core/middleware/built-in/auth.d.ts +2 -2
  132. package/dist/core/middleware/built-in/auth.js +51 -44
  133. package/dist/core/middleware/built-in/auth.js.map +1 -1
  134. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  135. package/dist/core/middleware/built-in/cache.js +8 -11
  136. package/dist/core/middleware/built-in/cache.js.map +1 -1
  137. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  138. package/dist/core/middleware/built-in/cdn.js +5 -9
  139. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  140. package/dist/core/middleware/built-in/cookie.d.ts +1 -1
  141. package/dist/core/middleware/built-in/cookie.js +3 -7
  142. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  143. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  144. package/dist/core/middleware/built-in/cors.js +3 -7
  145. package/dist/core/middleware/built-in/cors.js.map +1 -1
  146. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  147. package/dist/core/middleware/built-in/csp.js +5 -8
  148. package/dist/core/middleware/built-in/csp.js.map +1 -1
  149. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  150. package/dist/core/middleware/built-in/csrf.js +5 -8
  151. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  152. package/dist/core/middleware/built-in/error-tracker.js +3 -7
  153. package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
  154. package/dist/core/middleware/built-in/index.d.ts +28 -28
  155. package/dist/core/middleware/built-in/index.js +47 -82
  156. package/dist/core/middleware/built-in/index.js.map +1 -1
  157. package/dist/core/middleware/built-in/jwt-helpers.d.ts +27 -2
  158. package/dist/core/middleware/built-in/jwt-helpers.js +32 -10
  159. package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -1
  160. package/dist/core/middleware/built-in/performance-monitor.js +3 -7
  161. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
  162. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  163. package/dist/core/middleware/built-in/rate-limit.js +3 -7
  164. package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
  165. package/dist/core/middleware/built-in/request-logger.js +3 -7
  166. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  167. package/dist/core/middleware/built-in/session.d.ts +2 -2
  168. package/dist/core/middleware/built-in/session.js +11 -15
  169. package/dist/core/middleware/built-in/session.js.map +1 -1
  170. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  171. package/dist/core/middleware/built-in/sse.js +3 -7
  172. package/dist/core/middleware/built-in/sse.js.map +1 -1
  173. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  174. package/dist/core/middleware/built-in/validation.js +3 -7
  175. package/dist/core/middleware/built-in/validation.js.map +1 -1
  176. package/dist/core/middleware/index.d.ts +4 -4
  177. package/dist/core/middleware/index.js +8 -28
  178. package/dist/core/middleware/index.js.map +1 -1
  179. package/dist/core/modules/auto-discovery.d.ts +3 -3
  180. package/dist/core/modules/auto-discovery.js +43 -81
  181. package/dist/core/modules/auto-discovery.js.map +1 -1
  182. package/dist/core/modules/index.d.ts +2 -2
  183. package/dist/core/modules/index.js +2 -9
  184. package/dist/core/modules/index.js.map +1 -1
  185. package/dist/core/modules/modules.d.ts +3 -3
  186. package/dist/core/modules/modules.js +11 -52
  187. package/dist/core/modules/modules.js.map +1 -1
  188. package/dist/core/networking/adapters/index.d.ts +4 -3
  189. package/dist/core/networking/adapters/index.js +3 -7
  190. package/dist/core/networking/adapters/index.js.map +1 -1
  191. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  192. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  193. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  194. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  195. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  196. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  197. package/dist/core/networking/adapters/ws-adapter.d.ts +1 -1
  198. package/dist/core/networking/adapters/ws-adapter.js +7 -42
  199. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  200. package/dist/core/networking/index.d.ts +3 -2
  201. package/dist/core/networking/index.js +2 -7
  202. package/dist/core/networking/index.js.map +1 -1
  203. package/dist/core/networking/service-discovery.js +3 -7
  204. package/dist/core/networking/service-discovery.js.map +1 -1
  205. package/dist/core/networking/websocket-adapter.js +1 -2
  206. package/dist/core/networking/websocket-adapter.js.map +1 -1
  207. package/dist/core/networking/websocket-manager.d.ts +3 -3
  208. package/dist/core/networking/websocket-manager.js +9 -11
  209. package/dist/core/networking/websocket-manager.js.map +1 -1
  210. package/dist/core/routing/app-integration.d.ts +2 -2
  211. package/dist/core/routing/app-integration.js +7 -12
  212. package/dist/core/routing/app-integration.js.map +1 -1
  213. package/dist/core/routing/index.d.ts +2 -2
  214. package/dist/core/routing/index.js +7 -14
  215. package/dist/core/routing/index.js.map +1 -1
  216. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  217. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  218. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  219. package/dist/core/runtime/base-adapter.d.ts +2 -2
  220. package/dist/core/runtime/base-adapter.js +3 -7
  221. package/dist/core/runtime/base-adapter.js.map +1 -1
  222. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  223. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  224. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  225. package/dist/core/runtime/index.d.ts +12 -12
  226. package/dist/core/runtime/index.js +22 -35
  227. package/dist/core/runtime/index.js.map +1 -1
  228. package/dist/core/runtime/node-adapter.d.ts +4 -4
  229. package/dist/core/runtime/node-adapter.js +6 -43
  230. package/dist/core/runtime/node-adapter.js.map +1 -1
  231. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  232. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  233. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  234. package/dist/core/utilities/circuit-breaker.js +1 -5
  235. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  236. package/dist/core/utilities/container.js +12 -22
  237. package/dist/core/utilities/container.js.map +1 -1
  238. package/dist/core/utilities/hooks.d.ts +2 -2
  239. package/dist/core/utilities/hooks.js +7 -12
  240. package/dist/core/utilities/hooks.js.map +1 -1
  241. package/dist/core/utilities/index.d.ts +5 -4
  242. package/dist/core/utilities/index.js +5 -19
  243. package/dist/core/utilities/index.js.map +1 -1
  244. package/dist/core/utilities/package-utils.d.ts +38 -0
  245. package/dist/core/utilities/package-utils.js +57 -0
  246. package/dist/core/utilities/package-utils.js.map +1 -0
  247. package/dist/core/validation/adapters.d.ts +1 -1
  248. package/dist/core/validation/adapters.js +15 -26
  249. package/dist/core/validation/adapters.js.map +1 -1
  250. package/dist/core/validation/index.d.ts +6 -4
  251. package/dist/core/validation/index.js +57 -28
  252. package/dist/core/validation/index.js.map +1 -1
  253. package/dist/core/validation/schema-interface.js +3 -9
  254. package/dist/core/validation/schema-interface.js.map +1 -1
  255. package/dist/index.d.ts +51 -52
  256. package/dist/index.js +23 -132
  257. package/dist/index.js.map +1 -1
  258. package/dist/moro.d.ts +30 -10
  259. package/dist/moro.js +262 -126
  260. package/dist/moro.js.map +1 -1
  261. package/dist/types/auth.js +3 -9
  262. package/dist/types/auth.js.map +1 -1
  263. package/dist/types/cache.js +1 -2
  264. package/dist/types/cdn.js +1 -2
  265. package/dist/types/config.d.ts +13 -1
  266. package/dist/types/config.js +1 -2
  267. package/dist/types/config.js.map +1 -1
  268. package/dist/types/core.d.ts +3 -3
  269. package/dist/types/core.js +1 -2
  270. package/dist/types/database.js +1 -2
  271. package/dist/types/discovery.js +1 -2
  272. package/dist/types/events.js +1 -2
  273. package/dist/types/hooks.d.ts +1 -1
  274. package/dist/types/hooks.js +1 -2
  275. package/dist/types/http.js +1 -2
  276. package/dist/types/logger.js +1 -2
  277. package/dist/types/module.js +1 -2
  278. package/dist/types/runtime.d.ts +1 -1
  279. package/dist/types/runtime.js +1 -2
  280. package/dist/types/session.js +1 -2
  281. package/jest.config.mjs +41 -0
  282. package/package.json +18 -51
  283. package/src/core/auth/morojs-adapter.ts +1 -1
  284. package/src/core/config/config-manager.ts +2 -2
  285. package/src/core/config/config-sources.ts +6 -6
  286. package/src/core/config/config-validator.ts +38 -3
  287. package/src/core/config/file-loader.ts +13 -40
  288. package/src/core/config/index.ts +15 -11
  289. package/src/core/config/schema.ts +3 -2
  290. package/src/core/config/utils.ts +3 -3
  291. package/src/core/database/adapters/drizzle.ts +18 -6
  292. package/src/core/database/adapters/index.ts +13 -13
  293. package/src/core/database/adapters/mongodb.ts +23 -3
  294. package/src/core/database/adapters/mysql.ts +18 -4
  295. package/src/core/database/adapters/postgresql.ts +18 -3
  296. package/src/core/database/adapters/redis.ts +34 -4
  297. package/src/core/database/adapters/sqlite.ts +19 -3
  298. package/src/core/database/index.ts +2 -2
  299. package/src/core/docs/index.ts +8 -8
  300. package/src/core/docs/openapi-generator.ts +4 -4
  301. package/src/core/docs/schema-to-openapi.ts +3 -6
  302. package/src/core/docs/simple-docs.ts +2 -2
  303. package/src/core/docs/swagger-ui.ts +19 -16
  304. package/src/core/docs/zod-to-openapi.ts +34 -34
  305. package/src/core/events/event-bus.ts +2 -2
  306. package/src/core/events/index.ts +2 -2
  307. package/src/core/framework.ts +190 -49
  308. package/src/core/http/http-server.ts +16 -159
  309. package/src/core/http/index.ts +4 -3
  310. package/src/core/http/router.ts +2 -2
  311. package/src/core/http/uws-http-server.ts +794 -0
  312. package/src/core/logger/filters.ts +1 -1
  313. package/src/core/logger/index.ts +3 -3
  314. package/src/core/logger/logger.ts +9 -1
  315. package/src/core/logger/outputs.ts +1 -1
  316. package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
  317. package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
  318. package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
  319. package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
  320. package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
  321. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
  322. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
  323. package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
  324. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  325. package/src/core/middleware/built-in/auth-helpers.ts +1 -1
  326. package/src/core/middleware/built-in/auth-providers.ts +1 -1
  327. package/src/core/middleware/built-in/auth.ts +64 -41
  328. package/src/core/middleware/built-in/cache.ts +5 -5
  329. package/src/core/middleware/built-in/cdn.ts +4 -4
  330. package/src/core/middleware/built-in/cookie.ts +2 -2
  331. package/src/core/middleware/built-in/cors.ts +2 -2
  332. package/src/core/middleware/built-in/csp.ts +3 -3
  333. package/src/core/middleware/built-in/csrf.ts +3 -3
  334. package/src/core/middleware/built-in/error-tracker.ts +1 -1
  335. package/src/core/middleware/built-in/index.ts +31 -31
  336. package/src/core/middleware/built-in/jwt-helpers.ts +32 -4
  337. package/src/core/middleware/built-in/performance-monitor.ts +1 -1
  338. package/src/core/middleware/built-in/rate-limit.ts +2 -2
  339. package/src/core/middleware/built-in/request-logger.ts +1 -1
  340. package/src/core/middleware/built-in/session.ts +7 -8
  341. package/src/core/middleware/built-in/sse.ts +2 -2
  342. package/src/core/middleware/built-in/validation.ts +2 -2
  343. package/src/core/middleware/index.ts +6 -6
  344. package/src/core/modules/auto-discovery.ts +4 -4
  345. package/src/core/modules/index.ts +2 -2
  346. package/src/core/modules/modules.ts +4 -4
  347. package/src/core/networking/adapters/index.ts +4 -3
  348. package/src/core/networking/adapters/socketio-adapter.ts +5 -3
  349. package/src/core/networking/adapters/uws-adapter.ts +619 -0
  350. package/src/core/networking/adapters/ws-adapter.ts +6 -4
  351. package/src/core/networking/index.ts +3 -2
  352. package/src/core/networking/service-discovery.ts +1 -1
  353. package/src/core/networking/websocket-manager.ts +7 -7
  354. package/src/core/routing/app-integration.ts +3 -3
  355. package/src/core/routing/index.ts +3 -3
  356. package/src/core/runtime/aws-lambda-adapter.ts +3 -3
  357. package/src/core/runtime/base-adapter.ts +2 -2
  358. package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
  359. package/src/core/runtime/index.ts +13 -13
  360. package/src/core/runtime/node-adapter.ts +4 -4
  361. package/src/core/runtime/vercel-edge-adapter.ts +3 -3
  362. package/src/core/utilities/hooks.ts +3 -3
  363. package/src/core/utilities/index.ts +5 -4
  364. package/src/core/utilities/package-utils.ts +59 -0
  365. package/src/core/validation/adapters.ts +1 -1
  366. package/src/core/validation/index.ts +68 -16
  367. package/src/index.ts +73 -66
  368. package/src/moro.ts +303 -75
  369. package/src/types/config.ts +13 -1
  370. package/src/types/core.ts +3 -3
  371. package/src/types/hooks.ts +1 -1
  372. package/src/types/runtime.ts +1 -1
  373. package/tsconfig.json +4 -2
@@ -5,18 +5,20 @@ import {
5
5
  createServer as createHttp2Server,
6
6
  } from 'http2';
7
7
  import { EventEmitter } from 'events';
8
- import { MoroHttpServer, HttpRequest, HttpResponse, middleware } from './http';
9
- import { Router } from './http';
10
- import { Container } from './utilities';
11
- import { ModuleLoader } from './modules';
12
- import { WebSocketManager } from './networking';
13
- import { CircuitBreaker } from './utilities';
14
- import { MoroEventBus } from './events';
15
- import { createFrameworkLogger, logger as globalLogger } from './logger';
16
- import { ModuleConfig, InternalRouteDefinition } from '../types/module';
17
- import { LogLevel, LoggerOptions } from '../types/logger';
18
- import { MoroOptions as CoreMoroOptions } from '../types/core';
19
- import { WebSocketAdapter, WebSocketAdapterOptions } from './networking/websocket-adapter';
8
+ import { MoroHttpServer, HttpRequest, HttpResponse, middleware } from './http/index.js';
9
+ import { UWebSocketsHttpServer } from './http/uws-http-server.js';
10
+ import { Router } from './http/router.js';
11
+ import { Container } from './utilities/container.js';
12
+ import { ModuleLoader } from './modules/index.js';
13
+ import { WebSocketManager } from './networking/websocket-manager.js';
14
+ import { CircuitBreaker } from './utilities/circuit-breaker.js';
15
+ import { isPackageAvailable } from './utilities/package-utils.js';
16
+ import { MoroEventBus } from './events/index.js';
17
+ import { createFrameworkLogger, logger as globalLogger } from './logger/index.js';
18
+ import { ModuleConfig, InternalRouteDefinition } from '../types/module.js';
19
+ import { LogLevel, LoggerOptions } from '../types/logger.js';
20
+ import { MoroOptions as CoreMoroOptions } from '../types/core.js';
21
+ import { WebSocketAdapter, WebSocketAdapterOptions } from './networking/websocket-adapter.js';
20
22
 
21
23
  // Extended MoroOptions that includes both core options and framework-specific options
22
24
  export interface MoroOptions extends CoreMoroOptions {
@@ -39,8 +41,8 @@ export interface MoroOptions extends CoreMoroOptions {
39
41
  }
40
42
 
41
43
  export class Moro extends EventEmitter {
42
- private httpServer: MoroHttpServer;
43
- private server: Server | any; // HTTP/2 server type
44
+ private httpServer: MoroHttpServer | UWebSocketsHttpServer;
45
+ private server: Server | any; // HTTP/2 server type or uWebSockets app
44
46
  private websocketAdapter?: WebSocketAdapter;
45
47
  private container: Container;
46
48
  private moduleLoader: ModuleLoader;
@@ -53,6 +55,9 @@ export class Moro extends EventEmitter {
53
55
  private logger: any;
54
56
  private options: MoroOptions;
55
57
  private config: any;
58
+ private usingUWebSockets = false;
59
+ // WebSocket initialization promise to handle async adapter detection
60
+ private websocketSetupPromise: Promise<void> | null = null;
56
61
 
57
62
  constructor(options: MoroOptions = {}) {
58
63
  super();
@@ -77,10 +82,33 @@ export class Moro extends EventEmitter {
77
82
  // Initialize framework logger after global configuration
78
83
  this.logger = createFrameworkLogger('Core');
79
84
 
80
- this.httpServer = new MoroHttpServer();
85
+ // Check if uWebSockets should be used for HTTP and WebSocket
86
+ const useUWebSockets = this.config.server?.useUWebSockets || false;
87
+
88
+ if (useUWebSockets) {
89
+ try {
90
+ // Try to use uWebSockets for ultra-high performance HTTP and WebSocket
91
+ const sslOptions = this.config.server?.ssl || options.https;
92
+ this.httpServer = new UWebSocketsHttpServer({ ssl: sslOptions });
93
+ this.server = (this.httpServer as UWebSocketsHttpServer).getApp();
94
+ this.usingUWebSockets = true;
95
+ this.logger.info('uWebSockets HTTP+WebSocket server created', 'ServerInit');
96
+ } catch (error) {
97
+ // Fallback to standard HTTP/1.1 if uWebSockets fails to load
98
+ this.logger.warn(
99
+ 'uWebSockets failed to initialize, falling back to Node.js http.Server. ' +
100
+ 'Error: ' +
101
+ (error instanceof Error ? error.message : String(error)),
102
+ 'ServerInit'
103
+ );
104
+ this.usingUWebSockets = false;
105
+ this.httpServer = new MoroHttpServer();
106
+ this.server = (this.httpServer as MoroHttpServer).getServer();
107
+ }
108
+ } else if (options.http2) {
109
+ // Use HTTP/2
110
+ this.httpServer = new MoroHttpServer();
81
111
 
82
- // Create HTTP/2 or HTTP/1.1 server based on options
83
- if (options.http2) {
84
112
  if (options.https) {
85
113
  this.server = createHttp2SecureServer(options.https);
86
114
  } else {
@@ -95,12 +123,14 @@ export class Moro extends EventEmitter {
95
123
  req.url = headers[':path'];
96
124
  req.method = headers[':method'];
97
125
  req.headers = headers;
98
- this.httpServer['handleRequest'](req, res);
126
+ (this.httpServer as MoroHttpServer)['handleRequest'](req, res);
99
127
  });
100
128
 
101
129
  this.logger.info('HTTP/2 server created', 'ServerInit');
102
130
  } else {
103
- this.server = this.httpServer.getServer();
131
+ // Use standard HTTP/1.1
132
+ this.httpServer = new MoroHttpServer();
133
+ this.server = (this.httpServer as MoroHttpServer).getServer();
104
134
  }
105
135
 
106
136
  this.container = new Container();
@@ -111,7 +141,8 @@ export class Moro extends EventEmitter {
111
141
  this.config.websocket.enabled ||
112
142
  (options.websocket && typeof options.websocket === 'object')
113
143
  ) {
114
- this.setupWebSockets(options.websocket || {});
144
+ // Store the promise so we can await it before using websockets
145
+ this.websocketSetupPromise = this.setupWebSockets(options.websocket || {});
115
146
  }
116
147
 
117
148
  // Initialize enterprise event bus
@@ -184,29 +215,47 @@ export class Moro extends EventEmitter {
184
215
  */
185
216
  private async setupWebSockets(wsConfig: any): Promise<void> {
186
217
  try {
187
- // Use provided adapter or try to auto-detect
188
- if (wsConfig.adapter) {
189
- this.websocketAdapter = wsConfig.adapter;
218
+ // If using uWebSockets HTTP server, automatically use uWebSockets for WebSocket too
219
+ if (this.usingUWebSockets) {
220
+ const { UWebSocketsAdapter } = await import('./networking/adapters/index.js');
221
+ this.websocketAdapter = new UWebSocketsAdapter();
222
+
223
+ // For uWebSockets, we need to integrate with the existing app
224
+ const uwsHttpServer = this.httpServer as UWebSocketsHttpServer;
225
+ await this.websocketAdapter.initialize(uwsHttpServer.getApp(), wsConfig.options);
226
+
227
+ this.logger.info(
228
+ 'uWebSockets adapter initialized (integrated with HTTP server)',
229
+ 'WebSocketSetup'
230
+ );
190
231
  } else {
191
- this.websocketAdapter = (await this.detectWebSocketAdapter()) || undefined;
232
+ // Use provided adapter or try to auto-detect
233
+ if (wsConfig.adapter) {
234
+ this.websocketAdapter = wsConfig.adapter;
235
+ } else {
236
+ this.websocketAdapter = (await this.detectWebSocketAdapter()) || undefined;
237
+ }
238
+
239
+ if (this.websocketAdapter) {
240
+ await this.websocketAdapter.initialize(this.server, wsConfig.options);
241
+
242
+ this.logger.info(
243
+ `WebSocket adapter initialized: ${this.websocketAdapter.getAdapterName()}`,
244
+ 'WebSocketSetup'
245
+ );
246
+ }
192
247
  }
193
248
 
249
+ // Configure adapter features (if adapter was created)
194
250
  if (this.websocketAdapter) {
195
- await this.websocketAdapter.initialize(this.server, wsConfig.options);
196
251
  this.websocketManager = new WebSocketManager(this.websocketAdapter, this.container);
197
252
 
198
- // Configure adapter features
199
253
  if (wsConfig.compression) {
200
254
  this.websocketAdapter.setCompression(true);
201
255
  }
202
256
  if (wsConfig.customIdGenerator) {
203
257
  this.websocketAdapter.setCustomIdGenerator(wsConfig.customIdGenerator);
204
258
  }
205
-
206
- this.logger.info(
207
- `WebSocket adapter initialized: ${this.websocketAdapter.getAdapterName()}`,
208
- 'WebSocketSetup'
209
- );
210
259
  }
211
260
  } catch (error) {
212
261
  this.logger.warn(
@@ -219,26 +268,72 @@ export class Moro extends EventEmitter {
219
268
 
220
269
  /**
221
270
  * Auto-detect available WebSocket adapter
271
+ * Tests if the library is actually installed by checking require.resolve
222
272
  */
223
273
  private async detectWebSocketAdapter(): Promise<WebSocketAdapter | null> {
224
- // Try socket.io first
225
- try {
226
- const { SocketIOAdapter } = await import('./networking/adapters');
227
- return new SocketIOAdapter();
228
- } catch {
229
- // socket.io not available
274
+ // Check if adapter is specified in config
275
+ if (this.config.websocket?.adapter) {
276
+ const adapterType = this.config.websocket.adapter;
277
+
278
+ if (adapterType === 'uws' && isPackageAvailable('uWebSockets.js')) {
279
+ try {
280
+ const { UWebSocketsAdapter } = await import('./networking/adapters/index.js');
281
+ return new UWebSocketsAdapter();
282
+ } catch {
283
+ this.logger.warn('uWebSockets.js specified but failed to load', 'AdapterDetection');
284
+ }
285
+ } else if (adapterType === 'socket.io' && isPackageAvailable('socket.io')) {
286
+ try {
287
+ const { SocketIOAdapter } = await import('./networking/adapters/index.js');
288
+ return new SocketIOAdapter();
289
+ } catch {
290
+ this.logger.warn('socket.io specified but failed to load', 'AdapterDetection');
291
+ }
292
+ } else if (adapterType === 'ws' && isPackageAvailable('ws')) {
293
+ try {
294
+ const { WSAdapter } = await import('./networking/adapters/index.js');
295
+ return new WSAdapter();
296
+ } catch {
297
+ this.logger.warn('ws specified but failed to load', 'AdapterDetection');
298
+ }
299
+ }
230
300
  }
231
301
 
232
- // Try native ws library
233
- try {
234
- const { WSAdapter } = await import('./networking/adapters');
235
- return new WSAdapter();
236
- } catch {
237
- // ws not available
302
+ // Auto-detect: Try uWebSockets.js first (highest performance)
303
+ if (isPackageAvailable('uWebSockets.js')) {
304
+ try {
305
+ const { UWebSocketsAdapter } = await import('./networking/adapters/index.js');
306
+ this.logger.debug('uWebSockets.js detected and loaded', 'AdapterDetection');
307
+ return new UWebSocketsAdapter();
308
+ } catch {
309
+ // Failed to load adapter
310
+ }
311
+ }
312
+
313
+ // Try socket.io second
314
+ if (isPackageAvailable('socket.io')) {
315
+ try {
316
+ const { SocketIOAdapter } = await import('./networking/adapters/index.js');
317
+ this.logger.debug('socket.io detected and loaded', 'AdapterDetection');
318
+ return new SocketIOAdapter();
319
+ } catch {
320
+ // Failed to load adapter
321
+ }
322
+ }
323
+
324
+ // Try native ws library last
325
+ if (isPackageAvailable('ws')) {
326
+ try {
327
+ const { WSAdapter } = await import('./networking/adapters/index.js');
328
+ this.logger.debug('ws detected and loaded', 'AdapterDetection');
329
+ return new WSAdapter();
330
+ } catch {
331
+ // Failed to load adapter
332
+ }
238
333
  }
239
334
 
240
335
  this.logger.warn(
241
- 'No WebSocket adapter found. Install socket.io or ws for WebSocket support',
336
+ 'No WebSocket adapter found. Install uWebSockets.js, socket.io, or ws for WebSocket support',
242
337
  'AdapterDetection'
243
338
  );
244
339
  return null;
@@ -317,6 +412,15 @@ export class Moro extends EventEmitter {
317
412
  return this.websocketAdapter;
318
413
  }
319
414
 
415
+ /**
416
+ * Ensure WebSocket setup is complete (for async adapter detection)
417
+ */
418
+ async ensureWebSocketReady(): Promise<void> {
419
+ if (this.websocketSetupPromise) {
420
+ await this.websocketSetupPromise;
421
+ }
422
+ }
423
+
320
424
  /**
321
425
  * Get the WebSocket manager
322
426
  */
@@ -619,22 +723,61 @@ export class Moro extends EventEmitter {
619
723
  this.logger.debug(`Mounting router for basePath: ${basePath}`, 'Router');
620
724
 
621
725
  // Enterprise-grade middleware integration with performance optimization
726
+ // IMPORTANT: Module middleware runs AFTER user middleware (like auth) to ensure proper order
622
727
  this.httpServer.use(async (req: HttpRequest, res: HttpResponse, next: () => void) => {
623
728
  if (req.path.startsWith(basePath)) {
624
729
  this.logger.debug(`Module middleware handling: ${req.method} ${req.path}`, 'Middleware', {
625
730
  basePath,
626
731
  });
627
732
 
733
+ // Mark this request as being handled by a module
734
+ (req as any).__moduleBasePath = basePath;
735
+ (req as any).__moduleRouter = router;
736
+
737
+ // Continue to next middleware (including auth) first
738
+ next();
739
+ } else {
740
+ next();
741
+ }
742
+ });
743
+
744
+ this.logger.info(`Router mounted for ${basePath}`, 'Router');
745
+ }
746
+
747
+ private finalModuleHandlerSetup = false;
748
+
749
+ // Setup final module handler that runs after all user middleware
750
+ setupFinalModuleHandler(): void {
751
+ // Prevent duplicate setup
752
+ if (this.finalModuleHandlerSetup) {
753
+ this.logger.debug('Final module handler already set up, skipping', 'ModuleSystem');
754
+ return;
755
+ }
756
+ this.finalModuleHandlerSetup = true;
757
+
758
+ this.logger.info(
759
+ 'Setting up final module handler to run after user middleware',
760
+ 'ModuleSystem'
761
+ );
762
+
763
+ this.httpServer.use(async (req: HttpRequest, res: HttpResponse, next: () => void) => {
764
+ // Check if this request was marked for module handling
765
+ const moduleBasePath = (req as any).__moduleBasePath;
766
+ const moduleRouter = (req as any).__moduleRouter;
767
+
768
+ if (moduleBasePath && moduleRouter && !res.headersSent) {
769
+ this.logger.debug(`Final module handler processing: ${req.method} ${req.path}`, 'Router');
770
+
628
771
  try {
629
- const handled = await router.handle(req, res, basePath);
630
- this.logger.debug(`Route handled: ${handled}`, 'Router');
772
+ const handled = await moduleRouter.handle(req, res, moduleBasePath);
773
+ this.logger.debug(`Route handled by module: ${handled}`, 'Router');
631
774
 
632
775
  if (!handled) {
633
776
  next(); // Let other middleware handle it
634
777
  }
635
778
  // If handled, the router already sent the response, so don't call next()
636
779
  } catch (error) {
637
- this.logger.error('Router error', 'Router', {
780
+ this.logger.error('Module router error', 'Router', {
638
781
  error: error instanceof Error ? error.message : String(error),
639
782
  });
640
783
  if (!res.headersSent) {
@@ -645,8 +788,6 @@ export class Moro extends EventEmitter {
645
788
  next();
646
789
  }
647
790
  });
648
-
649
- this.logger.info(`Router mounted for ${basePath}`, 'Router');
650
791
  }
651
792
 
652
793
  private async setupWebSocketHandlers(config: ModuleConfig): Promise<void> {
@@ -1,9 +1,17 @@
1
1
  // src/core/http-server.ts
2
2
  import { IncomingMessage, ServerResponse, createServer, Server } from 'http';
3
3
  import * as zlib from 'zlib';
4
+ import { createReadStream } from 'fs';
5
+ import * as crypto from 'crypto';
4
6
  import { promisify } from 'util';
5
- import { createFrameworkLogger } from '../logger';
6
- import { HttpRequest, HttpResponse, HttpHandler, Middleware, RouteEntry } from '../../types/http';
7
+ import { createFrameworkLogger } from '../logger/index.js';
8
+ import {
9
+ HttpRequest,
10
+ HttpResponse,
11
+ HttpHandler,
12
+ Middleware,
13
+ RouteEntry,
14
+ } from '../../types/http.js';
7
15
 
8
16
  const gzip = promisify(zlib.gzip);
9
17
  const deflate = promisify(zlib.deflate);
@@ -285,64 +293,6 @@ export class MoroHttpServer {
285
293
  // Execute handler
286
294
  await route.handler(httpReq, httpRes);
287
295
  } catch (error) {
288
- // Handle JWT-specific errors gracefully
289
- if (
290
- error instanceof Error &&
291
- (error.name === 'TokenExpiredError' ||
292
- error.name === 'JsonWebTokenError' ||
293
- error.name === 'NotBeforeError')
294
- ) {
295
- this.logger.debug('JWT authentication error', 'RequestHandler', {
296
- errorType: error.name,
297
- errorMessage: error.message,
298
- requestPath: req.url,
299
- requestMethod: req.method,
300
- requestId: httpReq.requestId,
301
- });
302
-
303
- if (!httpRes.headersSent) {
304
- if (typeof httpRes.status === 'function' && typeof httpRes.json === 'function') {
305
- if (error.name === 'TokenExpiredError') {
306
- httpRes.status(401).json({
307
- success: false,
308
- error: 'Token expired',
309
- message: 'Your session has expired. Please sign in again.',
310
- requestId: httpReq.requestId,
311
- expiredAt: (error as any).expiredAt,
312
- });
313
- } else if (error.name === 'JsonWebTokenError') {
314
- httpRes.status(401).json({
315
- success: false,
316
- error: 'Invalid token',
317
- message: 'The provided authentication token is invalid.',
318
- requestId: httpReq.requestId,
319
- });
320
- } else if (error.name === 'NotBeforeError') {
321
- httpRes.status(401).json({
322
- success: false,
323
- error: 'Token not ready',
324
- message: 'The authentication token is not yet valid.',
325
- requestId: httpReq.requestId,
326
- availableAt: (error as any).date,
327
- });
328
- }
329
- } else {
330
- // Fallback for non-enhanced response objects
331
- httpRes.statusCode = 401;
332
- httpRes.setHeader('Content-Type', 'application/json');
333
- httpRes.end(
334
- JSON.stringify({
335
- success: false,
336
- error: 'Authentication failed',
337
- message: 'JWT authentication error occurred.',
338
- requestId: httpReq.requestId,
339
- })
340
- );
341
- }
342
- }
343
- return;
344
- }
345
-
346
296
  // Debug: Log the actual error and where it came from
347
297
  this.logger.debug('Request error details', 'RequestHandler', {
348
298
  errorType: typeof error,
@@ -1074,101 +1024,11 @@ export class MoroHttpServer {
1074
1024
  if (!nextCalled) next();
1075
1025
  })
1076
1026
  .catch(error => {
1077
- // Handle JWT errors in async middleware
1078
- if (
1079
- error instanceof Error &&
1080
- (error.name === 'TokenExpiredError' ||
1081
- error.name === 'JsonWebTokenError' ||
1082
- error.name === 'NotBeforeError')
1083
- ) {
1084
- if (!res.headersSent) {
1085
- if (typeof res.status === 'function' && typeof res.json === 'function') {
1086
- if (error.name === 'TokenExpiredError') {
1087
- res.status(401).json({
1088
- success: false,
1089
- error: 'Token expired',
1090
- message: 'Your session has expired. Please sign in again.',
1091
- expiredAt: (error as any).expiredAt,
1092
- });
1093
- } else if (error.name === 'JsonWebTokenError') {
1094
- res.status(401).json({
1095
- success: false,
1096
- error: 'Invalid token',
1097
- message: 'The provided authentication token is invalid.',
1098
- });
1099
- } else if (error.name === 'NotBeforeError') {
1100
- res.status(401).json({
1101
- success: false,
1102
- error: 'Token not ready',
1103
- message: 'The authentication token is not yet valid.',
1104
- availableAt: (error as any).date,
1105
- });
1106
- }
1107
- } else {
1108
- res.statusCode = 401;
1109
- res.setHeader('Content-Type', 'application/json');
1110
- res.end(
1111
- JSON.stringify({
1112
- success: false,
1113
- error: 'Authentication failed',
1114
- message: 'JWT authentication error occurred.',
1115
- })
1116
- );
1117
- }
1118
- }
1119
- resolve(); // Continue middleware chain
1120
- } else {
1121
- reject(error);
1122
- }
1027
+ reject(error);
1123
1028
  });
1124
1029
  }
1125
1030
  } catch (error) {
1126
- // Handle JWT errors in sync middleware
1127
- if (
1128
- error instanceof Error &&
1129
- (error.name === 'TokenExpiredError' ||
1130
- error.name === 'JsonWebTokenError' ||
1131
- error.name === 'NotBeforeError')
1132
- ) {
1133
- if (!res.headersSent) {
1134
- if (typeof res.status === 'function' && typeof res.json === 'function') {
1135
- if (error.name === 'TokenExpiredError') {
1136
- res.status(401).json({
1137
- success: false,
1138
- error: 'Token expired',
1139
- message: 'Your session has expired. Please sign in again.',
1140
- expiredAt: (error as any).expiredAt,
1141
- });
1142
- } else if (error.name === 'JsonWebTokenError') {
1143
- res.status(401).json({
1144
- success: false,
1145
- error: 'Invalid token',
1146
- message: 'The provided authentication token is invalid.',
1147
- });
1148
- } else if (error.name === 'NotBeforeError') {
1149
- res.status(401).json({
1150
- success: false,
1151
- error: 'Token not ready',
1152
- message: 'The authentication token is not yet valid.',
1153
- availableAt: (error as any).date,
1154
- });
1155
- }
1156
- } else {
1157
- res.statusCode = 401;
1158
- res.setHeader('Content-Type', 'application/json');
1159
- res.end(
1160
- JSON.stringify({
1161
- success: false,
1162
- error: 'Authentication failed',
1163
- message: 'JWT authentication error occurred.',
1164
- })
1165
- );
1166
- }
1167
- }
1168
- resolve(); // Continue middleware chain
1169
- } else {
1170
- reject(error);
1171
- }
1031
+ reject(error);
1172
1032
  }
1173
1033
  });
1174
1034
  }
@@ -1281,7 +1141,6 @@ export const middleware = {
1281
1141
  },
1282
1142
 
1283
1143
  compression: (options: { threshold?: number; level?: number } = {}): Middleware => {
1284
- const zlib = require('zlib');
1285
1144
  const threshold = options.threshold || 1024;
1286
1145
  const level = options.level || 6;
1287
1146
 
@@ -1867,7 +1726,7 @@ export const middleware = {
1867
1726
  res.setHeader('Content-Length', chunkSize);
1868
1727
 
1869
1728
  // Stream the range
1870
- const stream = require('fs').createReadStream(filePath, {
1729
+ const stream = createReadStream(filePath, {
1871
1730
  start,
1872
1731
  end,
1873
1732
  });
@@ -1885,12 +1744,12 @@ export const middleware = {
1885
1744
  res.write(`\r\n--${boundary}\r\n`);
1886
1745
  res.write(`Content-Range: bytes ${start}-${end}/${fileSize}\r\n\r\n`);
1887
1746
 
1888
- const stream = require('fs').createReadStream(filePath, {
1747
+ const stream = createReadStream(filePath, {
1889
1748
  start,
1890
1749
  end,
1891
1750
  });
1892
- await new Promise(resolve => {
1893
- stream.on('end', resolve);
1751
+ await new Promise<void>(resolve => {
1752
+ stream.on('end', () => resolve());
1894
1753
  stream.pipe(res, { end: false });
1895
1754
  });
1896
1755
  }
@@ -1924,7 +1783,6 @@ export const middleware = {
1924
1783
  const ignoreMethods = options.ignoreMethods || ['GET', 'HEAD', 'OPTIONS'];
1925
1784
 
1926
1785
  const generateToken = () => {
1927
- const crypto = require('crypto');
1928
1786
  return crypto.randomBytes(tokenLength).toString('hex');
1929
1787
  };
1930
1788
 
@@ -2013,7 +1871,6 @@ export const middleware = {
2013
1871
  // Generate nonce if requested
2014
1872
  let nonce: string | undefined;
2015
1873
  if (options.nonce) {
2016
- const crypto = require('crypto');
2017
1874
  nonce = crypto.randomBytes(16).toString('base64');
2018
1875
  (req as any).cspNonce = nonce;
2019
1876
  }
@@ -1,6 +1,7 @@
1
1
  // HTTP System - Centralized Exports
2
- export { MoroHttpServer, middleware } from './http-server';
3
- export { Router } from './router';
2
+ export { MoroHttpServer, middleware } from './http-server.js';
3
+ export { UWebSocketsHttpServer } from './uws-http-server.js';
4
+ export { Router } from './router.js';
4
5
 
5
6
  // Type exports
6
- export type { HttpRequest, HttpResponse, HttpHandler, Middleware } from '../../types/http';
7
+ export type { HttpRequest, HttpResponse, HttpHandler, Middleware } from '../../types/http.js';
@@ -5,8 +5,8 @@ import {
5
5
  HttpHandler,
6
6
  Middleware,
7
7
  RouteDefinition,
8
- } from '../../types/http';
9
- import { createFrameworkLogger } from '../logger';
8
+ } from '../../types/http.js';
9
+ import { createFrameworkLogger } from '../logger/index.js';
10
10
 
11
11
  export class Router {
12
12
  private routes: RouteDefinition[] = [];