@morojs/moro 1.6.1 → 1.6.3

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 (575) hide show
  1. package/README.md +74 -256
  2. package/dist/core/auth/morojs-adapter.js +20 -20
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.d.ts +44 -0
  5. package/dist/core/config/config-manager.js +104 -0
  6. package/dist/core/config/config-manager.js.map +1 -0
  7. package/dist/core/config/config-sources.d.ts +21 -0
  8. package/dist/core/config/config-sources.js +503 -0
  9. package/dist/core/config/config-sources.js.map +1 -0
  10. package/dist/core/config/config-validator.d.ts +21 -0
  11. package/dist/core/config/config-validator.js +791 -0
  12. package/dist/core/config/config-validator.js.map +1 -0
  13. package/dist/core/config/file-loader.d.ts +1 -6
  14. package/dist/core/config/file-loader.js +21 -249
  15. package/dist/core/config/file-loader.js.map +1 -1
  16. package/dist/core/config/index.d.ts +41 -12
  17. package/dist/core/config/index.js +65 -54
  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 +55 -44
  21. package/dist/core/config/schema.js.map +1 -1
  22. package/dist/core/config/utils.d.ts +10 -3
  23. package/dist/core/config/utils.js +31 -58
  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 +13 -1
  32. package/dist/core/database/adapters/mongodb.js +46 -10
  33. package/dist/core/database/adapters/mongodb.js.map +1 -1
  34. package/dist/core/database/adapters/mysql.d.ts +14 -1
  35. package/dist/core/database/adapters/mysql.js +19 -9
  36. package/dist/core/database/adapters/mysql.js.map +1 -1
  37. package/dist/core/database/adapters/postgresql.d.ts +12 -2
  38. package/dist/core/database/adapters/postgresql.js +19 -9
  39. package/dist/core/database/adapters/postgresql.js.map +1 -1
  40. package/dist/core/database/adapters/redis.d.ts +12 -1
  41. package/dist/core/database/adapters/redis.js +48 -13
  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 +7 -11
  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 +20 -13
  73. package/dist/core/framework.js +285 -102
  74. package/dist/core/framework.js.map +1 -1
  75. package/dist/core/http/http-server.d.ts +59 -7
  76. package/dist/core/http/http-server.js +202 -185
  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/uws-http-server.d.ts +46 -0
  82. package/dist/core/http/uws-http-server.js +523 -0
  83. package/dist/core/http/uws-http-server.js.map +1 -0
  84. package/dist/core/logger/filters.d.ts +1 -1
  85. package/dist/core/logger/filters.js +20 -23
  86. package/dist/core/logger/filters.js.map +1 -1
  87. package/dist/core/logger/index.d.ts +3 -3
  88. package/dist/core/logger/index.js +2 -24
  89. package/dist/core/logger/index.js.map +1 -1
  90. package/dist/core/logger/logger.d.ts +30 -14
  91. package/dist/core/logger/logger.js +398 -223
  92. package/dist/core/logger/logger.js.map +1 -1
  93. package/dist/core/logger/outputs.d.ts +1 -1
  94. package/dist/core/logger/outputs.js +8 -17
  95. package/dist/core/logger/outputs.js.map +1 -1
  96. package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
  97. package/dist/core/middleware/built-in/auth/core.js +358 -0
  98. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  99. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +12 -23
  100. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  101. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  102. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  103. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  104. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  105. package/dist/core/middleware/built-in/auth/index.js +15 -0
  106. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  107. package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +118 -0
  108. package/dist/core/middleware/built-in/auth/jwt-helpers.js +218 -0
  109. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  110. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  111. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  112. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  113. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  114. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +5 -10
  115. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  116. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  117. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +10 -47
  118. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  119. package/dist/core/middleware/built-in/cache/adapters/cache/index.d.ts +5 -0
  120. package/dist/core/middleware/built-in/cache/adapters/cache/index.js +21 -0
  121. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  122. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  123. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +3 -7
  124. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  125. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +3 -1
  126. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +11 -9
  127. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  128. package/dist/core/middleware/built-in/cache/adapters/index.d.ts +2 -0
  129. package/dist/core/middleware/built-in/cache/adapters/index.js +5 -0
  130. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  131. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  132. package/dist/core/middleware/built-in/cache/core.js +87 -0
  133. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  134. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  135. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +30 -14
  136. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  137. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  138. package/dist/core/middleware/built-in/cache/index.js +9 -0
  139. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  140. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  141. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  142. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  143. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  144. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +3 -7
  145. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  146. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  147. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +3 -7
  148. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  149. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +3 -1
  150. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +12 -10
  151. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  152. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.d.ts +5 -0
  153. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js +21 -0
  154. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  155. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  156. package/dist/core/middleware/built-in/cdn/adapters/index.js +5 -0
  157. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  158. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  159. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  160. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  161. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  162. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  163. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  164. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  165. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  166. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  167. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  168. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  169. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  170. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  171. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  172. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  173. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  174. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  175. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  176. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  177. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  178. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  179. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  180. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  181. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  182. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  183. package/dist/core/middleware/built-in/cors/core.js +51 -0
  184. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  185. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  186. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  187. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  188. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  189. package/dist/core/middleware/built-in/cors/index.js +9 -0
  190. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  191. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  192. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  193. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  194. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  195. package/dist/core/middleware/built-in/csp/core.js +88 -0
  196. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  197. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  198. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  199. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  200. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  201. package/dist/core/middleware/built-in/csp/index.js +9 -0
  202. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  203. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  204. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  205. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  206. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  207. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  208. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  209. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  210. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  211. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  212. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  213. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  214. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  215. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  216. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  217. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  218. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  219. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  220. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  221. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  222. package/dist/core/middleware/built-in/error-tracker/middleware.js +26 -0
  223. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  224. package/dist/core/middleware/built-in/index.d.ts +28 -61
  225. package/dist/core/middleware/built-in/index.js +48 -78
  226. package/dist/core/middleware/built-in/index.js.map +1 -1
  227. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  228. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  229. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  230. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  231. package/dist/core/middleware/built-in/performance-monitor/middleware.js +29 -0
  232. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  233. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  234. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  235. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  236. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  237. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +24 -22
  238. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  239. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  240. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  241. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  242. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  243. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  244. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  245. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  246. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  247. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  248. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  249. package/dist/core/middleware/built-in/request-logger/middleware.js +24 -0
  250. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  251. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  252. package/dist/core/middleware/built-in/session/core.js +227 -0
  253. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  254. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  255. package/dist/core/middleware/built-in/session/hook.js +53 -0
  256. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  257. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  258. package/dist/core/middleware/built-in/session/index.js +9 -0
  259. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  260. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  261. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  262. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  263. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  264. package/dist/core/middleware/built-in/sse/core.js +117 -0
  265. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  266. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  267. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  268. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  269. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  270. package/dist/core/middleware/built-in/sse/index.js +9 -0
  271. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  272. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  273. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  274. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  275. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  276. package/dist/core/middleware/built-in/validation/core.js +93 -0
  277. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  278. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  279. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +16 -9
  280. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  281. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  282. package/dist/core/middleware/built-in/validation/index.js +9 -0
  283. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  284. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  285. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  286. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  287. package/dist/core/middleware/index.d.ts +4 -4
  288. package/dist/core/middleware/index.js +14 -28
  289. package/dist/core/middleware/index.js.map +1 -1
  290. package/dist/core/modules/auto-discovery.d.ts +19 -2
  291. package/dist/core/modules/auto-discovery.js +391 -74
  292. package/dist/core/modules/auto-discovery.js.map +1 -1
  293. package/dist/core/modules/index.d.ts +2 -2
  294. package/dist/core/modules/index.js +2 -9
  295. package/dist/core/modules/index.js.map +1 -1
  296. package/dist/core/modules/modules.d.ts +3 -3
  297. package/dist/core/modules/modules.js +23 -54
  298. package/dist/core/modules/modules.js.map +1 -1
  299. package/dist/core/networking/adapters/index.d.ts +4 -3
  300. package/dist/core/networking/adapters/index.js +3 -7
  301. package/dist/core/networking/adapters/index.js.map +1 -1
  302. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  303. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  304. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  305. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  306. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  307. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  308. package/dist/core/networking/adapters/ws-adapter.d.ts +2 -2
  309. package/dist/core/networking/adapters/ws-adapter.js +8 -43
  310. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  311. package/dist/core/networking/index.d.ts +3 -2
  312. package/dist/core/networking/index.js +2 -7
  313. package/dist/core/networking/index.js.map +1 -1
  314. package/dist/core/networking/service-discovery.js +8 -12
  315. package/dist/core/networking/service-discovery.js.map +1 -1
  316. package/dist/core/networking/websocket-adapter.js +1 -2
  317. package/dist/core/networking/websocket-adapter.js.map +1 -1
  318. package/dist/core/networking/websocket-manager.d.ts +3 -3
  319. package/dist/core/networking/websocket-manager.js +9 -11
  320. package/dist/core/networking/websocket-manager.js.map +1 -1
  321. package/dist/core/pooling/object-pool-manager.d.ts +140 -0
  322. package/dist/core/pooling/object-pool-manager.js +502 -0
  323. package/dist/core/pooling/object-pool-manager.js.map +1 -0
  324. package/dist/core/routing/app-integration.d.ts +14 -12
  325. package/dist/core/routing/app-integration.js +49 -85
  326. package/dist/core/routing/app-integration.js.map +1 -1
  327. package/dist/core/routing/index.d.ts +17 -11
  328. package/dist/core/routing/index.js +48 -237
  329. package/dist/core/routing/index.js.map +1 -1
  330. package/dist/core/routing/path-matcher.d.ts +67 -0
  331. package/dist/core/routing/path-matcher.js +182 -0
  332. package/dist/core/routing/path-matcher.js.map +1 -0
  333. package/dist/core/routing/router.d.ts +38 -0
  334. package/dist/core/routing/router.js +68 -0
  335. package/dist/core/routing/router.js.map +1 -0
  336. package/dist/core/routing/unified-router.d.ts +132 -0
  337. package/dist/core/routing/unified-router.js +639 -0
  338. package/dist/core/routing/unified-router.js.map +1 -0
  339. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  340. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  341. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  342. package/dist/core/runtime/base-adapter.d.ts +2 -2
  343. package/dist/core/runtime/base-adapter.js +3 -7
  344. package/dist/core/runtime/base-adapter.js.map +1 -1
  345. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  346. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  347. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  348. package/dist/core/runtime/index.d.ts +12 -12
  349. package/dist/core/runtime/index.js +22 -35
  350. package/dist/core/runtime/index.js.map +1 -1
  351. package/dist/core/runtime/node-adapter.d.ts +4 -4
  352. package/dist/core/runtime/node-adapter.js +18 -49
  353. package/dist/core/runtime/node-adapter.js.map +1 -1
  354. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  355. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  356. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  357. package/dist/core/utilities/circuit-breaker.js +1 -5
  358. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  359. package/dist/core/utilities/container.js +12 -22
  360. package/dist/core/utilities/container.js.map +1 -1
  361. package/dist/core/utilities/hooks.d.ts +2 -2
  362. package/dist/core/utilities/hooks.js +7 -12
  363. package/dist/core/utilities/hooks.js.map +1 -1
  364. package/dist/core/utilities/index.d.ts +5 -4
  365. package/dist/core/utilities/index.js +5 -19
  366. package/dist/core/utilities/index.js.map +1 -1
  367. package/dist/core/utilities/package-utils.d.ts +38 -0
  368. package/dist/core/utilities/package-utils.js +57 -0
  369. package/dist/core/utilities/package-utils.js.map +1 -0
  370. package/dist/core/validation/adapters.d.ts +1 -1
  371. package/dist/core/validation/adapters.js +15 -26
  372. package/dist/core/validation/adapters.js.map +1 -1
  373. package/dist/core/validation/index.d.ts +6 -4
  374. package/dist/core/validation/index.js +57 -28
  375. package/dist/core/validation/index.js.map +1 -1
  376. package/dist/core/validation/schema-interface.js +3 -9
  377. package/dist/core/validation/schema-interface.js.map +1 -1
  378. package/dist/index.d.ts +52 -52
  379. package/dist/index.js +24 -132
  380. package/dist/index.js.map +1 -1
  381. package/dist/moro.d.ts +70 -16
  382. package/dist/moro.js +650 -269
  383. package/dist/moro.js.map +1 -1
  384. package/dist/types/auth.js +3 -9
  385. package/dist/types/auth.js.map +1 -1
  386. package/dist/types/cache.js +1 -2
  387. package/dist/types/cdn.js +1 -2
  388. package/dist/types/config.d.ts +73 -2
  389. package/dist/types/config.js +1 -2
  390. package/dist/types/config.js.map +1 -1
  391. package/dist/types/core.d.ts +36 -42
  392. package/dist/types/core.js +1 -2
  393. package/dist/types/database.js +1 -2
  394. package/dist/types/discovery.js +1 -2
  395. package/dist/types/events.js +1 -2
  396. package/dist/types/hooks.d.ts +4 -1
  397. package/dist/types/hooks.js +1 -2
  398. package/dist/types/http.d.ts +16 -1
  399. package/dist/types/http.js +1 -2
  400. package/dist/types/logger.d.ts +7 -0
  401. package/dist/types/logger.js +1 -2
  402. package/dist/types/module.d.ts +11 -0
  403. package/dist/types/module.js +1 -2
  404. package/dist/types/runtime.d.ts +1 -1
  405. package/dist/types/runtime.js +1 -2
  406. package/dist/types/session.js +1 -2
  407. package/package.json +18 -55
  408. package/dist/core/config/loader.d.ts +0 -7
  409. package/dist/core/config/loader.js +0 -269
  410. package/dist/core/config/loader.js.map +0 -1
  411. package/dist/core/config/validation.d.ts +0 -17
  412. package/dist/core/config/validation.js +0 -131
  413. package/dist/core/config/validation.js.map +0 -1
  414. package/dist/core/http/router.d.ts +0 -14
  415. package/dist/core/http/router.js +0 -109
  416. package/dist/core/http/router.js.map +0 -1
  417. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  418. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +0 -5
  419. package/dist/core/middleware/built-in/adapters/cache/index.js +0 -28
  420. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  421. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  422. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  423. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  424. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  425. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  426. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +0 -5
  427. package/dist/core/middleware/built-in/adapters/cdn/index.js +0 -28
  428. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  429. package/dist/core/middleware/built-in/adapters/index.d.ts +0 -4
  430. package/dist/core/middleware/built-in/adapters/index.js +0 -26
  431. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  432. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  433. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  434. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  435. package/dist/core/middleware/built-in/auth.js +0 -281
  436. package/dist/core/middleware/built-in/auth.js.map +0 -1
  437. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  438. package/dist/core/middleware/built-in/cache.js.map +0 -1
  439. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  440. package/dist/core/middleware/built-in/cdn.js +0 -113
  441. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  442. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  443. package/dist/core/middleware/built-in/cookie.js +0 -68
  444. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  445. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  446. package/dist/core/middleware/built-in/cors.js +0 -29
  447. package/dist/core/middleware/built-in/cors.js.map +0 -1
  448. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  449. package/dist/core/middleware/built-in/csp.js +0 -71
  450. package/dist/core/middleware/built-in/csp.js.map +0 -1
  451. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  452. package/dist/core/middleware/built-in/csrf.js +0 -63
  453. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  454. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  455. package/dist/core/middleware/built-in/error-tracker.js +0 -19
  456. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  457. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  458. package/dist/core/middleware/built-in/performance-monitor.js +0 -22
  459. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  460. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  461. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  462. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  463. package/dist/core/middleware/built-in/request-logger.js +0 -16
  464. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  465. package/dist/core/middleware/built-in/session.d.ts +0 -41
  466. package/dist/core/middleware/built-in/session.js +0 -209
  467. package/dist/core/middleware/built-in/session.js.map +0 -1
  468. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  469. package/dist/core/middleware/built-in/sse.js +0 -71
  470. package/dist/core/middleware/built-in/sse.js.map +0 -1
  471. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  472. package/dist/core/middleware/built-in/validation.js.map +0 -1
  473. package/src/core/auth/README.md +0 -339
  474. package/src/core/auth/morojs-adapter.ts +0 -410
  475. package/src/core/config/file-loader.ts +0 -407
  476. package/src/core/config/index.ts +0 -60
  477. package/src/core/config/loader.ts +0 -633
  478. package/src/core/config/schema.ts +0 -150
  479. package/src/core/config/utils.ts +0 -251
  480. package/src/core/config/validation.ts +0 -140
  481. package/src/core/database/README.md +0 -228
  482. package/src/core/database/adapters/drizzle.ts +0 -403
  483. package/src/core/database/adapters/index.ts +0 -42
  484. package/src/core/database/adapters/mongodb.ts +0 -269
  485. package/src/core/database/adapters/mysql.ts +0 -207
  486. package/src/core/database/adapters/postgresql.ts +0 -201
  487. package/src/core/database/adapters/redis.ts +0 -326
  488. package/src/core/database/adapters/sqlite.ts +0 -247
  489. package/src/core/database/index.ts +0 -3
  490. package/src/core/docs/index.ts +0 -231
  491. package/src/core/docs/openapi-generator.ts +0 -576
  492. package/src/core/docs/schema-to-openapi.ts +0 -148
  493. package/src/core/docs/simple-docs.ts +0 -295
  494. package/src/core/docs/swagger-ui.ts +0 -351
  495. package/src/core/docs/zod-to-openapi.ts +0 -532
  496. package/src/core/events/event-bus.ts +0 -231
  497. package/src/core/events/index.ts +0 -12
  498. package/src/core/framework.ts +0 -636
  499. package/src/core/http/http-server.ts +0 -1787
  500. package/src/core/http/index.ts +0 -6
  501. package/src/core/http/router.ts +0 -141
  502. package/src/core/logger/filters.ts +0 -145
  503. package/src/core/logger/index.ts +0 -20
  504. package/src/core/logger/logger.ts +0 -814
  505. package/src/core/logger/outputs.ts +0 -134
  506. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  507. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  508. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  509. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -100
  510. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  511. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  512. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -83
  513. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  514. package/src/core/middleware/built-in/adapters/index.ts +0 -7
  515. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  516. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  517. package/src/core/middleware/built-in/auth.ts +0 -329
  518. package/src/core/middleware/built-in/cache.ts +0 -211
  519. package/src/core/middleware/built-in/cdn.ts +0 -124
  520. package/src/core/middleware/built-in/cookie.ts +0 -85
  521. package/src/core/middleware/built-in/cors.ts +0 -38
  522. package/src/core/middleware/built-in/csp.ts +0 -101
  523. package/src/core/middleware/built-in/csrf.ts +0 -82
  524. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  525. package/src/core/middleware/built-in/index.ts +0 -79
  526. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  527. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  528. package/src/core/middleware/built-in/request-logger.ts +0 -14
  529. package/src/core/middleware/built-in/session.ts +0 -288
  530. package/src/core/middleware/built-in/sse.ts +0 -86
  531. package/src/core/middleware/built-in/validation.ts +0 -33
  532. package/src/core/middleware/index.ts +0 -177
  533. package/src/core/modules/auto-discovery.ts +0 -263
  534. package/src/core/modules/index.ts +0 -3
  535. package/src/core/modules/modules.ts +0 -124
  536. package/src/core/networking/adapters/index.ts +0 -16
  537. package/src/core/networking/adapters/socketio-adapter.ts +0 -252
  538. package/src/core/networking/adapters/ws-adapter.ts +0 -430
  539. package/src/core/networking/index.ts +0 -3
  540. package/src/core/networking/service-discovery.ts +0 -304
  541. package/src/core/networking/websocket-adapter.ts +0 -217
  542. package/src/core/networking/websocket-manager.ts +0 -308
  543. package/src/core/routing/app-integration.ts +0 -216
  544. package/src/core/routing/index.ts +0 -488
  545. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  546. package/src/core/runtime/base-adapter.ts +0 -130
  547. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  548. package/src/core/runtime/index.ts +0 -62
  549. package/src/core/runtime/node-adapter.ts +0 -196
  550. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  551. package/src/core/utilities/circuit-breaker.ts +0 -46
  552. package/src/core/utilities/container.ts +0 -736
  553. package/src/core/utilities/hooks.ts +0 -142
  554. package/src/core/utilities/index.ts +0 -16
  555. package/src/core/validation/adapters.ts +0 -147
  556. package/src/core/validation/index.ts +0 -206
  557. package/src/core/validation/schema-interface.ts +0 -100
  558. package/src/index.ts +0 -226
  559. package/src/moro.ts +0 -1197
  560. package/src/types/auth.ts +0 -440
  561. package/src/types/cache.ts +0 -38
  562. package/src/types/cdn.ts +0 -22
  563. package/src/types/config.ts +0 -157
  564. package/src/types/core.ts +0 -56
  565. package/src/types/database.ts +0 -32
  566. package/src/types/discovery.ts +0 -7
  567. package/src/types/events.ts +0 -82
  568. package/src/types/hooks.ts +0 -47
  569. package/src/types/http.ts +0 -67
  570. package/src/types/logger.ts +0 -93
  571. package/src/types/module.ts +0 -87
  572. package/src/types/runtime.ts +0 -76
  573. package/src/types/session.ts +0 -89
  574. package/tsconfig.json +0 -21
  575. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
@@ -1,636 +0,0 @@
1
- // Core Moro Framework with Pluggable WebSocket Adapters
2
- import { createServer, Server } from 'http';
3
- import {
4
- createSecureServer as createHttp2SecureServer,
5
- createServer as createHttp2Server,
6
- } from 'http2';
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 { WebSocketAdapter, WebSocketAdapterOptions } from './networking/websocket-adapter';
19
-
20
- export interface MoroOptions {
21
- http2?: boolean;
22
- https?: {
23
- key: string | Buffer;
24
- cert: string | Buffer;
25
- ca?: string | Buffer;
26
- };
27
- compression?: {
28
- enabled?: boolean;
29
- threshold?: number;
30
- };
31
- websocket?:
32
- | {
33
- enabled?: boolean;
34
- adapter?: WebSocketAdapter;
35
- compression?: boolean;
36
- customIdGenerator?: () => string;
37
- options?: WebSocketAdapterOptions;
38
- }
39
- | false;
40
- logger?: LoggerOptions | boolean;
41
- }
42
-
43
- export class Moro extends EventEmitter {
44
- private httpServer: MoroHttpServer;
45
- private server: Server | any; // HTTP/2 server type
46
- private websocketAdapter?: WebSocketAdapter;
47
- private container: Container;
48
- private moduleLoader: ModuleLoader;
49
- private websocketManager?: WebSocketManager;
50
- private circuitBreakers = new Map<string, CircuitBreaker>();
51
- private rateLimiters = new Map<string, Map<string, { count: number; resetTime: number }>>();
52
- // Enterprise-grade event system
53
- private eventBus: MoroEventBus;
54
- // Framework logger
55
- private logger: any;
56
- private options: MoroOptions;
57
-
58
- constructor(options: MoroOptions = {}) {
59
- super();
60
- this.options = options;
61
-
62
- // Configure global logger based on options
63
- if (options.logger !== undefined) {
64
- if (options.logger === false) {
65
- // Disable logging by setting level to fatal (highest level)
66
- globalLogger.setLevel('fatal');
67
- } else if (typeof options.logger === 'object') {
68
- // Configure logger with provided options
69
- if (options.logger.level) {
70
- globalLogger.setLevel(options.logger.level);
71
- }
72
- // Additional logger options can be configured here in the future
73
- // For now, we focus on the level setting which is the most common need
74
- }
75
- }
76
-
77
- // Initialize framework logger after global configuration
78
- this.logger = createFrameworkLogger('Core');
79
-
80
- this.httpServer = new MoroHttpServer();
81
-
82
- // Create HTTP/2 or HTTP/1.1 server based on options
83
- if (options.http2) {
84
- if (options.https) {
85
- this.server = createHttp2SecureServer(options.https);
86
- } else {
87
- this.server = createHttp2Server();
88
- }
89
-
90
- // Handle HTTP/2 streams manually
91
- this.server.on('stream', (stream: any, headers: any) => {
92
- // Convert HTTP/2 stream to HTTP/1.1-like request/response
93
- const req = stream as any;
94
- const res = stream as any;
95
- req.url = headers[':path'];
96
- req.method = headers[':method'];
97
- req.headers = headers;
98
- this.httpServer['handleRequest'](req, res);
99
- });
100
-
101
- this.logger.info('HTTP/2 server created', 'ServerInit');
102
- } else {
103
- this.server = this.httpServer.getServer();
104
- }
105
-
106
- this.container = new Container();
107
- this.moduleLoader = new ModuleLoader(this.container);
108
-
109
- // Setup WebSocket adapter if enabled
110
- if (options.websocket !== false) {
111
- this.setupWebSockets(options.websocket || {});
112
- }
113
-
114
- // Initialize enterprise event bus
115
- this.eventBus = new MoroEventBus({
116
- maxListeners: 200,
117
- enableMetrics: true,
118
- isolation: 'module',
119
- });
120
-
121
- // Register event bus in DI container as factory
122
- this.container.register('eventBus', () => this.eventBus);
123
-
124
- this.setupCore();
125
- }
126
-
127
- // Middleware support
128
- use(middleware: any): this {
129
- this.httpServer.use(middleware);
130
- return this;
131
- }
132
-
133
- private setupCore() {
134
- // Security middleware
135
- this.httpServer.use(middleware.helmet());
136
- this.httpServer.use(middleware.cors());
137
-
138
- // Performance middleware
139
- this.httpServer.use(middleware.compression());
140
- this.httpServer.use(middleware.bodySize({ limit: '10mb' }));
141
-
142
- // Request tracking middleware
143
- this.httpServer.use(this.requestTrackingMiddleware());
144
-
145
- // Error boundary middleware
146
- this.httpServer.use(this.errorBoundaryMiddleware());
147
- }
148
-
149
- /**
150
- * Setup WebSocket adapter and manager
151
- */
152
- private async setupWebSockets(wsConfig: any): Promise<void> {
153
- try {
154
- // Use provided adapter or try to auto-detect
155
- if (wsConfig.adapter) {
156
- this.websocketAdapter = wsConfig.adapter;
157
- } else {
158
- this.websocketAdapter = (await this.detectWebSocketAdapter()) || undefined;
159
- }
160
-
161
- if (this.websocketAdapter) {
162
- await this.websocketAdapter.initialize(this.server, wsConfig.options);
163
- this.websocketManager = new WebSocketManager(this.websocketAdapter, this.container);
164
-
165
- // Configure adapter features
166
- if (wsConfig.compression) {
167
- this.websocketAdapter.setCompression(true);
168
- }
169
- if (wsConfig.customIdGenerator) {
170
- this.websocketAdapter.setCustomIdGenerator(wsConfig.customIdGenerator);
171
- }
172
-
173
- this.logger.info(
174
- `WebSocket adapter initialized: ${this.websocketAdapter.getAdapterName()}`,
175
- 'WebSocketSetup'
176
- );
177
- }
178
- } catch (error) {
179
- this.logger.warn(
180
- 'WebSocket setup failed, continuing without WebSocket support',
181
- 'WebSocketSetup',
182
- { error: error instanceof Error ? error.message : String(error) }
183
- );
184
- }
185
- }
186
-
187
- /**
188
- * Auto-detect available WebSocket adapter
189
- */
190
- private async detectWebSocketAdapter(): Promise<WebSocketAdapter | null> {
191
- // Try socket.io first
192
- try {
193
- const { SocketIOAdapter } = await import('./networking/adapters');
194
- return new SocketIOAdapter();
195
- } catch {
196
- // socket.io not available
197
- }
198
-
199
- // Try native ws library
200
- try {
201
- const { WSAdapter } = await import('./networking/adapters');
202
- return new WSAdapter();
203
- } catch {
204
- // ws not available
205
- }
206
-
207
- this.logger.warn(
208
- 'No WebSocket adapter found. Install socket.io or ws for WebSocket support',
209
- 'AdapterDetection'
210
- );
211
- return null;
212
- }
213
-
214
- private requestTrackingMiddleware() {
215
- return (req: HttpRequest, res: HttpResponse, next: () => void) => {
216
- const startTime = Date.now();
217
-
218
- res.on('finish', () => {
219
- const duration = Date.now() - startTime;
220
- this.logger.info(
221
- `${req.method} ${req.path} - ${res.statusCode} - ${duration}ms [${req.requestId}]`
222
- );
223
- });
224
-
225
- next();
226
- };
227
- }
228
-
229
- private errorBoundaryMiddleware() {
230
- return async (req: HttpRequest, res: HttpResponse, next: () => void) => {
231
- try {
232
- next();
233
- } catch (error: any) {
234
- this.logger.error('Error:', error.message, error.stack);
235
-
236
- if (!res.headersSent) {
237
- res.status(500).json({
238
- success: false,
239
- error: 'Internal server error',
240
- requestId: req.requestId,
241
- });
242
- }
243
- }
244
- };
245
- }
246
-
247
- // Public API for adding middleware
248
- addMiddleware(middleware: any) {
249
- this.httpServer.use(middleware);
250
- this.emit('middleware:added', { middleware });
251
- return this;
252
- }
253
-
254
- // Public API for database registration
255
- registerDatabase(adapter: any) {
256
- this.container.register('database', () => adapter, true);
257
- this.emit('database:registered', { adapter });
258
- return this;
259
- }
260
-
261
- // Public API for accessing HTTP server
262
- getHttpServer() {
263
- return this.httpServer;
264
- }
265
-
266
- // Public API for accessing Socket.IO server
267
- /**
268
- * Get WebSocket adapter (for backward compatibility)
269
- * @deprecated Use getWebSocketAdapter() instead
270
- */
271
- getIOServer() {
272
- if (!this.websocketAdapter) {
273
- throw new Error(
274
- 'WebSocket adapter not available. Install socket.io or configure a WebSocket adapter.'
275
- );
276
- }
277
- return this.websocketAdapter;
278
- }
279
-
280
- /**
281
- * Get the WebSocket adapter
282
- */
283
- getWebSocketAdapter(): WebSocketAdapter | undefined {
284
- return this.websocketAdapter;
285
- }
286
-
287
- /**
288
- * Get the WebSocket manager
289
- */
290
- getWebSocketManager(): WebSocketManager | undefined {
291
- return this.websocketManager;
292
- }
293
-
294
- async loadModule(moduleConfig: ModuleConfig): Promise<void> {
295
- this.logger.info(
296
- `Loading module: ${moduleConfig.name}@${moduleConfig.version}`,
297
- 'ModuleLoader'
298
- );
299
-
300
- // Create module event bus once during module loading
301
- const moduleEventBus = this.eventBus.createModuleBus(moduleConfig.name);
302
-
303
- // Register services in DI container
304
- this.registerServices(moduleConfig);
305
-
306
- // Create module router with resilience patterns
307
- const router = await this.createModuleRouter(moduleConfig, moduleEventBus);
308
-
309
- // Setup WebSocket handlers
310
- if (moduleConfig.websockets) {
311
- await this.setupWebSocketHandlers(moduleConfig);
312
- }
313
-
314
- // Mount with versioning
315
- this.logger.debug(`Module version before basePath: "${moduleConfig.version}"`, 'ModuleLoader');
316
- const basePath = `/api/v${moduleConfig.version}/${moduleConfig.name}`;
317
- this.logger.debug(`Generated basePath: "${basePath}"`, 'ModuleLoader');
318
- this.mountRouter(basePath, router);
319
-
320
- this.logger.info(`Module loaded: ${moduleConfig.name}`, 'ModuleLoader');
321
- this.emit('moduleLoaded', moduleConfig.name);
322
- }
323
-
324
- private registerServices(config: ModuleConfig): void {
325
- if (!config.services) return;
326
-
327
- for (const service of config.services) {
328
- const factory = () => {
329
- const dependencies = (service.dependencies || []).map(dep => this.container.resolve(dep));
330
- return new service.implementation(...dependencies);
331
- };
332
-
333
- this.container.register(service.name, factory, service.singleton || false);
334
- }
335
-
336
- // Register functional route handlers if they exist
337
- if (config.routeHandlers) {
338
- for (const [name, handler] of Object.entries(config.routeHandlers)) {
339
- this.container.register(name, () => handler, false);
340
- }
341
- }
342
-
343
- // Register functional socket handlers if they exist
344
- if (config.socketHandlers) {
345
- for (const [name, handler] of Object.entries(config.socketHandlers)) {
346
- this.container.register(name, () => handler, false);
347
- }
348
- }
349
- }
350
-
351
- private async createModuleRouter(config: ModuleConfig, moduleEventBus: any): Promise<Router> {
352
- const router = new Router();
353
-
354
- this.logger.debug(`Creating router for module: ${config.name}`, 'Router');
355
- this.logger.debug(`Module has ${config.routes?.length || 0} routes`, 'Router');
356
-
357
- if (!config.routes) return router;
358
-
359
- for (const route of config.routes) {
360
- this.logger.debug(
361
- `Adding route: ${route.method} ${route.path} -> ${route.handler}`,
362
- 'Router'
363
- );
364
- const handler = await this.createResilientHandler(route, config, moduleEventBus);
365
- const method = route.method.toLowerCase() as keyof Router;
366
-
367
- // Add route to router
368
- (router[method] as Function)(route.path, handler);
369
- }
370
-
371
- this.logger.debug(`Router created with ${router.getRoutes().length} total routes`, 'Router');
372
- return router;
373
- }
374
-
375
- private async createResilientHandler(
376
- route: InternalRouteDefinition,
377
- config: ModuleConfig,
378
- moduleEventBus: any
379
- ) {
380
- const handlerKey = `${config.name}.${route.handler}`;
381
-
382
- return async (req: HttpRequest, res: HttpResponse) => {
383
- const requestId = req.headers['x-request-id'] || Math.random().toString(36);
384
-
385
- try {
386
- // Try to get functional handler first, then fall back to service-based
387
- let handler;
388
- let useEnhancedReq = false;
389
-
390
- if (config.routeHandlers && config.routeHandlers[route.handler]) {
391
- // New functional handler
392
- handler = config.routeHandlers[route.handler];
393
- useEnhancedReq = true;
394
- this.logger.debug(`Using functional handler: ${route.handler}`, 'Handler', {
395
- availableHandlers: Object.keys(config.routeHandlers || {}),
396
- });
397
- } else if (this.container.has(config.name)) {
398
- // Old service-based handler
399
- const service = this.container.resolve(config.name) as any;
400
- handler = service[route.handler];
401
- this.logger.debug(`Using service handler: ${config.name}.${route.handler}`, 'Handler');
402
- } else {
403
- this.logger.error(`No handler found for route ${route.method} ${route.path}`, 'Handler', {
404
- routeHandlers: Object.keys(config.routeHandlers || {}),
405
- containerHasModule: this.container.has(config.name),
406
- });
407
- throw new Error(`Handler ${route.handler} not found for module ${config.name}`);
408
- }
409
-
410
- if (!handler || typeof handler !== 'function') {
411
- throw new Error(`Handler ${route.handler} is not a function`);
412
- }
413
-
414
- // Validate request if validation schema is provided
415
- if (route.validation) {
416
- try {
417
- // Validate body
418
- if (route.validation.body && req.body !== undefined) {
419
- req.body = route.validation.body.parse(req.body);
420
- }
421
-
422
- // Validate query
423
- if (route.validation.query && req.query !== undefined) {
424
- req.query = route.validation.query.parse(req.query);
425
- }
426
-
427
- // Validate params
428
- if (route.validation.params && req.params !== undefined) {
429
- req.params = route.validation.params.parse(req.params);
430
- }
431
-
432
- // Validate headers
433
- if (route.validation.headers && req.headers !== undefined) {
434
- req.headers = route.validation.headers.parse(req.headers);
435
- }
436
-
437
- this.logger.debug('Module route validation passed', 'ModuleValidation', {
438
- route: `${route.method} ${route.path}`,
439
- module: config.name,
440
- });
441
- } catch (validationError: any) {
442
- if (validationError.issues) {
443
- this.logger.debug('Module route validation failed', 'ModuleValidation', {
444
- route: `${route.method} ${route.path}`,
445
- module: config.name,
446
- errors: validationError.issues.length,
447
- });
448
-
449
- res.status(400).json({
450
- success: false,
451
- error: 'Validation failed',
452
- details: validationError.issues.map((issue: any) => ({
453
- field: issue.path.length > 0 ? issue.path.join('.') : 'request',
454
- message: issue.message,
455
- code: issue.code,
456
- })),
457
- requestId,
458
- });
459
- return;
460
- }
461
- throw validationError;
462
- }
463
- }
464
-
465
- // Prepare request object based on handler type
466
- let requestToUse: any = req;
467
- if (useEnhancedReq) {
468
- // Use the pre-created module event bus
469
- requestToUse = {
470
- ...req,
471
- database: this.container.has('database')
472
- ? this.container.resolve('database')
473
- : undefined,
474
- events: moduleEventBus, // Use pre-created event bus
475
- app: {
476
- get: (key: string) => (key === 'io' ? this.websocketAdapter : undefined),
477
- },
478
- };
479
- this.logger.debug(`Database available: ${!!requestToUse.database}`, 'Handler', {
480
- moduleId: config.name,
481
- });
482
- }
483
-
484
- // Execute with circuit breaker
485
- const circuitBreaker = this.getCircuitBreaker(handlerKey);
486
- const result = await circuitBreaker.execute(() => handler(requestToUse, res));
487
-
488
- // For functional handlers, ensure the response is sent
489
- if (useEnhancedReq && result !== undefined && result !== null && !res.headersSent) {
490
- this.logger.debug(`Sending functional handler result`, 'Handler', {
491
- result,
492
- });
493
- res.json(result);
494
- }
495
-
496
- return result;
497
- } catch (error: any) {
498
- this.logger.error(`Route handler error [${requestId}]: ${error.message}`, 'Handler', {
499
- requestId,
500
- handlerKey,
501
- stack: error.stack,
502
- });
503
- if (!res.headersSent) {
504
- res.status(500).json({
505
- success: false,
506
- error: 'Internal server error',
507
- requestId,
508
- });
509
- }
510
- throw error;
511
- }
512
- };
513
- }
514
-
515
- private mountRouter(basePath: string, router: Router): void {
516
- this.logger.debug(`Mounting router for basePath: ${basePath}`, 'Router');
517
-
518
- // Enterprise-grade middleware integration with performance optimization
519
- this.httpServer.use(async (req: HttpRequest, res: HttpResponse, next: () => void) => {
520
- if (req.path.startsWith(basePath)) {
521
- this.logger.debug(`Module middleware handling: ${req.method} ${req.path}`, 'Middleware', {
522
- basePath,
523
- });
524
-
525
- try {
526
- const handled = await router.handle(req, res, basePath);
527
- this.logger.debug(`Route handled: ${handled}`, 'Router');
528
-
529
- if (!handled) {
530
- next(); // Let other middleware handle it
531
- }
532
- // If handled, the router already sent the response, so don't call next()
533
- } catch (error) {
534
- this.logger.error('Router error', 'Router', {
535
- error: error instanceof Error ? error.message : String(error),
536
- });
537
- if (!res.headersSent) {
538
- res.status(500).json({ success: false, error: 'Internal server error' });
539
- }
540
- }
541
- } else {
542
- next();
543
- }
544
- });
545
-
546
- this.logger.info(`Router mounted for ${basePath}`, 'Router');
547
- }
548
-
549
- private async setupWebSocketHandlers(config: ModuleConfig): Promise<void> {
550
- if (!this.websocketAdapter || !this.websocketManager) {
551
- this.logger.warn(
552
- `Module ${config.name} defines WebSocket handlers but no WebSocket adapter is available`,
553
- 'WebSocketSetup'
554
- );
555
- return;
556
- }
557
-
558
- const namespace = this.websocketAdapter.createNamespace(`/${config.name}`);
559
-
560
- for (const wsConfig of config.websockets || []) {
561
- await this.websocketManager.registerHandler(namespace, wsConfig, config);
562
- }
563
- }
564
-
565
- private checkRateLimit(
566
- identifier: string,
567
- rateLimit: { requests: number; window: number }
568
- ): boolean {
569
- if (!this.rateLimiters.has(identifier)) {
570
- this.rateLimiters.set(identifier, new Map());
571
- }
572
-
573
- const handlerLimiter = this.rateLimiters.get(identifier)!;
574
- const now = Date.now();
575
- const limit = handlerLimiter.get(identifier);
576
-
577
- if (!limit || now > limit.resetTime) {
578
- handlerLimiter.set(identifier, {
579
- count: 1,
580
- resetTime: now + rateLimit.window,
581
- });
582
- return true;
583
- }
584
-
585
- if (limit.count >= rateLimit.requests) {
586
- return false;
587
- }
588
-
589
- limit.count++;
590
- return true;
591
- }
592
-
593
- private getCircuitBreaker(key: string): CircuitBreaker {
594
- if (!this.circuitBreakers.has(key)) {
595
- this.circuitBreakers.set(
596
- key,
597
- new CircuitBreaker({
598
- failureThreshold: 5,
599
- resetTimeout: 30000,
600
- monitoringPeriod: 10000,
601
- })
602
- );
603
- }
604
- return this.circuitBreakers.get(key)!;
605
- }
606
-
607
- listen(port: number, callback?: () => void): void;
608
- listen(port: number, host: string, callback?: () => void): void;
609
- listen(port: number, host?: string | (() => void), callback?: () => void): void {
610
- if (typeof host === 'function') {
611
- this.httpServer.listen(port, host);
612
- } else if (host) {
613
- this.httpServer.listen(port, host, callback);
614
- } else {
615
- this.httpServer.listen(port, callback);
616
- }
617
- }
618
-
619
- // Compatibility method for existing controllers
620
- set(key: string, value: any): void {
621
- if (key === 'io') {
622
- // Deprecated: Use websocket adapter instead
623
- this.logger.warn(
624
- 'Setting io instance is deprecated. Use websocket adapter configuration.',
625
- 'Deprecated'
626
- );
627
- }
628
- }
629
-
630
- get(key: string): any {
631
- if (key === 'io') {
632
- return this.websocketAdapter;
633
- }
634
- return undefined;
635
- }
636
- }