@morojs/moro 1.0.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 (345) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/core/config/index.d.ts +19 -0
  4. package/dist/core/config/index.js +59 -0
  5. package/dist/core/config/index.js.map +1 -0
  6. package/dist/core/config/loader.d.ts +6 -0
  7. package/dist/core/config/loader.js +288 -0
  8. package/dist/core/config/loader.js.map +1 -0
  9. package/dist/core/config/schema.d.ts +335 -0
  10. package/dist/core/config/schema.js +286 -0
  11. package/dist/core/config/schema.js.map +1 -0
  12. package/dist/core/config/utils.d.ts +50 -0
  13. package/dist/core/config/utils.js +185 -0
  14. package/dist/core/config/utils.js.map +1 -0
  15. package/dist/core/database/adapters/drizzle.d.ts +29 -0
  16. package/dist/core/database/adapters/drizzle.js +366 -0
  17. package/dist/core/database/adapters/drizzle.js.map +1 -0
  18. package/dist/core/database/adapters/index.d.ts +8 -0
  19. package/dist/core/database/adapters/index.js +48 -0
  20. package/dist/core/database/adapters/index.js.map +1 -0
  21. package/dist/core/database/adapters/mongodb.d.ts +35 -0
  22. package/dist/core/database/adapters/mongodb.js +215 -0
  23. package/dist/core/database/adapters/mongodb.js.map +1 -0
  24. package/dist/core/database/adapters/mysql.d.ts +23 -0
  25. package/dist/core/database/adapters/mysql.js +149 -0
  26. package/dist/core/database/adapters/mysql.js.map +1 -0
  27. package/dist/core/database/adapters/postgresql.d.ts +24 -0
  28. package/dist/core/database/adapters/postgresql.js +160 -0
  29. package/dist/core/database/adapters/postgresql.js.map +1 -0
  30. package/dist/core/database/adapters/redis.d.ts +50 -0
  31. package/dist/core/database/adapters/redis.js +266 -0
  32. package/dist/core/database/adapters/redis.js.map +1 -0
  33. package/dist/core/database/adapters/sqlite.d.ts +23 -0
  34. package/dist/core/database/adapters/sqlite.js +194 -0
  35. package/dist/core/database/adapters/sqlite.js.map +1 -0
  36. package/dist/core/database/index.d.ts +2 -0
  37. package/dist/core/database/index.js +20 -0
  38. package/dist/core/database/index.js.map +1 -0
  39. package/dist/core/docs/index.d.ts +63 -0
  40. package/dist/core/docs/index.js +170 -0
  41. package/dist/core/docs/index.js.map +1 -0
  42. package/dist/core/docs/openapi-generator.d.ts +124 -0
  43. package/dist/core/docs/openapi-generator.js +413 -0
  44. package/dist/core/docs/openapi-generator.js.map +1 -0
  45. package/dist/core/docs/simple-docs.d.ts +21 -0
  46. package/dist/core/docs/simple-docs.js +268 -0
  47. package/dist/core/docs/simple-docs.js.map +1 -0
  48. package/dist/core/docs/swagger-ui.d.ts +28 -0
  49. package/dist/core/docs/swagger-ui.js +317 -0
  50. package/dist/core/docs/swagger-ui.js.map +1 -0
  51. package/dist/core/docs/zod-to-openapi.d.ts +29 -0
  52. package/dist/core/docs/zod-to-openapi.js +414 -0
  53. package/dist/core/docs/zod-to-openapi.js.map +1 -0
  54. package/dist/core/events/event-bus.d.ts +27 -0
  55. package/dist/core/events/event-bus.js +193 -0
  56. package/dist/core/events/event-bus.js.map +1 -0
  57. package/dist/core/events/index.d.ts +2 -0
  58. package/dist/core/events/index.js +7 -0
  59. package/dist/core/events/index.js.map +1 -0
  60. package/dist/core/framework.d.ts +57 -0
  61. package/dist/core/framework.js +432 -0
  62. package/dist/core/framework.js.map +1 -0
  63. package/dist/core/http/http-server.d.ts +114 -0
  64. package/dist/core/http/http-server.js +1154 -0
  65. package/dist/core/http/http-server.js.map +1 -0
  66. package/dist/core/http/index.d.ts +3 -0
  67. package/dist/core/http/index.js +10 -0
  68. package/dist/core/http/index.js.map +1 -0
  69. package/dist/core/http/router.d.ts +14 -0
  70. package/dist/core/http/router.js +113 -0
  71. package/dist/core/http/router.js.map +1 -0
  72. package/dist/core/logger/filters.d.ts +9 -0
  73. package/dist/core/logger/filters.js +134 -0
  74. package/dist/core/logger/filters.js.map +1 -0
  75. package/dist/core/logger/index.d.ts +3 -0
  76. package/dist/core/logger/index.js +26 -0
  77. package/dist/core/logger/index.js.map +1 -0
  78. package/dist/core/logger/logger.d.ts +49 -0
  79. package/dist/core/logger/logger.js +332 -0
  80. package/dist/core/logger/logger.js.map +1 -0
  81. package/dist/core/logger/outputs.d.ts +42 -0
  82. package/dist/core/logger/outputs.js +110 -0
  83. package/dist/core/logger/outputs.js.map +1 -0
  84. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +15 -0
  85. package/dist/core/middleware/built-in/adapters/cache/file.js +128 -0
  86. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -0
  87. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +5 -0
  88. package/dist/core/middleware/built-in/adapters/cache/index.js +28 -0
  89. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -0
  90. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +11 -0
  91. package/dist/core/middleware/built-in/adapters/cache/memory.js +65 -0
  92. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -0
  93. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +17 -0
  94. package/dist/core/middleware/built-in/adapters/cache/redis.js +91 -0
  95. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -0
  96. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +21 -0
  97. package/dist/core/middleware/built-in/adapters/cdn/azure.js +40 -0
  98. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -0
  99. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +14 -0
  100. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +77 -0
  101. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -0
  102. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +15 -0
  103. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +73 -0
  104. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -0
  105. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +5 -0
  106. package/dist/core/middleware/built-in/adapters/cdn/index.js +28 -0
  107. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -0
  108. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -0
  109. package/dist/core/middleware/built-in/adapters/index.js +26 -0
  110. package/dist/core/middleware/built-in/adapters/index.js.map +1 -0
  111. package/dist/core/middleware/built-in/auth.d.ts +2 -0
  112. package/dist/core/middleware/built-in/auth.js +38 -0
  113. package/dist/core/middleware/built-in/auth.js.map +1 -0
  114. package/dist/core/middleware/built-in/cache.d.ts +3 -0
  115. package/dist/core/middleware/built-in/cache.js +188 -0
  116. package/dist/core/middleware/built-in/cache.js.map +1 -0
  117. package/dist/core/middleware/built-in/cdn.d.ts +3 -0
  118. package/dist/core/middleware/built-in/cdn.js +115 -0
  119. package/dist/core/middleware/built-in/cdn.js.map +1 -0
  120. package/dist/core/middleware/built-in/cookie.d.ts +14 -0
  121. package/dist/core/middleware/built-in/cookie.js +68 -0
  122. package/dist/core/middleware/built-in/cookie.js.map +1 -0
  123. package/dist/core/middleware/built-in/cors.d.ts +2 -0
  124. package/dist/core/middleware/built-in/cors.js +29 -0
  125. package/dist/core/middleware/built-in/cors.js.map +1 -0
  126. package/dist/core/middleware/built-in/csp.d.ts +22 -0
  127. package/dist/core/middleware/built-in/csp.js +74 -0
  128. package/dist/core/middleware/built-in/csp.js.map +1 -0
  129. package/dist/core/middleware/built-in/csrf.d.ts +9 -0
  130. package/dist/core/middleware/built-in/csrf.js +66 -0
  131. package/dist/core/middleware/built-in/csrf.js.map +1 -0
  132. package/dist/core/middleware/built-in/error-tracker.d.ts +1 -0
  133. package/dist/core/middleware/built-in/error-tracker.js +19 -0
  134. package/dist/core/middleware/built-in/error-tracker.js.map +1 -0
  135. package/dist/core/middleware/built-in/index.d.ts +70 -0
  136. package/dist/core/middleware/built-in/index.js +70 -0
  137. package/dist/core/middleware/built-in/index.js.map +1 -0
  138. package/dist/core/middleware/built-in/performance-monitor.d.ts +1 -0
  139. package/dist/core/middleware/built-in/performance-monitor.js +22 -0
  140. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -0
  141. package/dist/core/middleware/built-in/rate-limit.d.ts +6 -0
  142. package/dist/core/middleware/built-in/rate-limit.js +47 -0
  143. package/dist/core/middleware/built-in/rate-limit.js.map +1 -0
  144. package/dist/core/middleware/built-in/request-logger.d.ts +1 -0
  145. package/dist/core/middleware/built-in/request-logger.js +15 -0
  146. package/dist/core/middleware/built-in/request-logger.js.map +1 -0
  147. package/dist/core/middleware/built-in/session.d.ts +41 -0
  148. package/dist/core/middleware/built-in/session.js +209 -0
  149. package/dist/core/middleware/built-in/session.js.map +1 -0
  150. package/dist/core/middleware/built-in/sse.d.ts +6 -0
  151. package/dist/core/middleware/built-in/sse.js +73 -0
  152. package/dist/core/middleware/built-in/sse.js.map +1 -0
  153. package/dist/core/middleware/built-in/validation.d.ts +2 -0
  154. package/dist/core/middleware/built-in/validation.js +31 -0
  155. package/dist/core/middleware/built-in/validation.js.map +1 -0
  156. package/dist/core/middleware/index.d.ts +21 -0
  157. package/dist/core/middleware/index.js +152 -0
  158. package/dist/core/middleware/index.js.map +1 -0
  159. package/dist/core/modules/auto-discovery.d.ts +27 -0
  160. package/dist/core/modules/auto-discovery.js +255 -0
  161. package/dist/core/modules/auto-discovery.js.map +1 -0
  162. package/dist/core/modules/index.d.ts +2 -0
  163. package/dist/core/modules/index.js +11 -0
  164. package/dist/core/modules/index.js.map +1 -0
  165. package/dist/core/modules/modules.d.ts +10 -0
  166. package/dist/core/modules/modules.js +137 -0
  167. package/dist/core/modules/modules.js.map +1 -0
  168. package/dist/core/networking/index.d.ts +2 -0
  169. package/dist/core/networking/index.js +9 -0
  170. package/dist/core/networking/index.js.map +1 -0
  171. package/dist/core/networking/service-discovery.d.ts +38 -0
  172. package/dist/core/networking/service-discovery.js +233 -0
  173. package/dist/core/networking/service-discovery.js.map +1 -0
  174. package/dist/core/networking/websocket-manager.d.ts +27 -0
  175. package/dist/core/networking/websocket-manager.js +211 -0
  176. package/dist/core/networking/websocket-manager.js.map +1 -0
  177. package/dist/core/routing/app-integration.d.ts +42 -0
  178. package/dist/core/routing/app-integration.js +152 -0
  179. package/dist/core/routing/app-integration.js.map +1 -0
  180. package/dist/core/routing/index.d.ts +106 -0
  181. package/dist/core/routing/index.js +343 -0
  182. package/dist/core/routing/index.js.map +1 -0
  183. package/dist/core/runtime/aws-lambda-adapter.d.ts +43 -0
  184. package/dist/core/runtime/aws-lambda-adapter.js +108 -0
  185. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -0
  186. package/dist/core/runtime/base-adapter.d.ts +16 -0
  187. package/dist/core/runtime/base-adapter.js +105 -0
  188. package/dist/core/runtime/base-adapter.js.map +1 -0
  189. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +18 -0
  190. package/dist/core/runtime/cloudflare-workers-adapter.js +131 -0
  191. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -0
  192. package/dist/core/runtime/index.d.ts +14 -0
  193. package/dist/core/runtime/index.js +56 -0
  194. package/dist/core/runtime/index.js.map +1 -0
  195. package/dist/core/runtime/node-adapter.d.ts +15 -0
  196. package/dist/core/runtime/node-adapter.js +204 -0
  197. package/dist/core/runtime/node-adapter.js.map +1 -0
  198. package/dist/core/runtime/vercel-edge-adapter.d.ts +10 -0
  199. package/dist/core/runtime/vercel-edge-adapter.js +106 -0
  200. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -0
  201. package/dist/core/utilities/circuit-breaker.d.ts +14 -0
  202. package/dist/core/utilities/circuit-breaker.js +42 -0
  203. package/dist/core/utilities/circuit-breaker.js.map +1 -0
  204. package/dist/core/utilities/container.d.ts +116 -0
  205. package/dist/core/utilities/container.js +529 -0
  206. package/dist/core/utilities/container.js.map +1 -0
  207. package/dist/core/utilities/hooks.d.ts +24 -0
  208. package/dist/core/utilities/hooks.js +131 -0
  209. package/dist/core/utilities/hooks.js.map +1 -0
  210. package/dist/core/utilities/index.d.ts +4 -0
  211. package/dist/core/utilities/index.js +22 -0
  212. package/dist/core/utilities/index.js.map +1 -0
  213. package/dist/core/validation/index.d.ts +30 -0
  214. package/dist/core/validation/index.js +144 -0
  215. package/dist/core/validation/index.js.map +1 -0
  216. package/dist/index.d.ts +30 -0
  217. package/dist/index.js +72 -0
  218. package/dist/index.js.map +1 -0
  219. package/dist/moro.d.ts +82 -0
  220. package/dist/moro.js +679 -0
  221. package/dist/moro.js.map +1 -0
  222. package/dist/types/cache.d.ts +34 -0
  223. package/dist/types/cache.js +3 -0
  224. package/dist/types/cache.js.map +1 -0
  225. package/dist/types/cdn.d.ts +19 -0
  226. package/dist/types/cdn.js +3 -0
  227. package/dist/types/cdn.js.map +1 -0
  228. package/dist/types/core.d.ts +13 -0
  229. package/dist/types/core.js +3 -0
  230. package/dist/types/core.js.map +1 -0
  231. package/dist/types/database.d.ts +29 -0
  232. package/dist/types/database.js +3 -0
  233. package/dist/types/database.js.map +1 -0
  234. package/dist/types/discovery.d.ts +6 -0
  235. package/dist/types/discovery.js +3 -0
  236. package/dist/types/discovery.js.map +1 -0
  237. package/dist/types/events.d.ts +116 -0
  238. package/dist/types/events.js +3 -0
  239. package/dist/types/events.js.map +1 -0
  240. package/dist/types/hooks.d.ts +38 -0
  241. package/dist/types/hooks.js +3 -0
  242. package/dist/types/hooks.js.map +1 -0
  243. package/dist/types/http.d.ts +51 -0
  244. package/dist/types/http.js +3 -0
  245. package/dist/types/http.js.map +1 -0
  246. package/dist/types/logger.d.ts +77 -0
  247. package/dist/types/logger.js +3 -0
  248. package/dist/types/logger.js.map +1 -0
  249. package/dist/types/module.d.ts +91 -0
  250. package/dist/types/module.js +3 -0
  251. package/dist/types/module.js.map +1 -0
  252. package/dist/types/runtime.d.ts +48 -0
  253. package/dist/types/runtime.js +3 -0
  254. package/dist/types/runtime.js.map +1 -0
  255. package/dist/types/session.d.ts +66 -0
  256. package/dist/types/session.js +3 -0
  257. package/dist/types/session.js.map +1 -0
  258. package/package.json +176 -0
  259. package/src/core/config/index.ts +47 -0
  260. package/src/core/config/loader.ts +366 -0
  261. package/src/core/config/schema.ts +346 -0
  262. package/src/core/config/utils.ts +220 -0
  263. package/src/core/database/README.md +228 -0
  264. package/src/core/database/adapters/drizzle.ts +425 -0
  265. package/src/core/database/adapters/index.ts +45 -0
  266. package/src/core/database/adapters/mongodb.ts +292 -0
  267. package/src/core/database/adapters/mysql.ts +217 -0
  268. package/src/core/database/adapters/postgresql.ts +211 -0
  269. package/src/core/database/adapters/redis.ts +331 -0
  270. package/src/core/database/adapters/sqlite.ts +255 -0
  271. package/src/core/database/index.ts +3 -0
  272. package/src/core/docs/index.ts +245 -0
  273. package/src/core/docs/openapi-generator.ts +588 -0
  274. package/src/core/docs/simple-docs.ts +305 -0
  275. package/src/core/docs/swagger-ui.ts +370 -0
  276. package/src/core/docs/zod-to-openapi.ts +532 -0
  277. package/src/core/events/event-bus.ts +249 -0
  278. package/src/core/events/index.ts +12 -0
  279. package/src/core/framework.ts +621 -0
  280. package/src/core/http/http-server.ts +1421 -0
  281. package/src/core/http/index.ts +11 -0
  282. package/src/core/http/router.ts +153 -0
  283. package/src/core/logger/filters.ts +148 -0
  284. package/src/core/logger/index.ts +20 -0
  285. package/src/core/logger/logger.ts +434 -0
  286. package/src/core/logger/outputs.ts +136 -0
  287. package/src/core/middleware/built-in/adapters/cache/file.ts +106 -0
  288. package/src/core/middleware/built-in/adapters/cache/index.ts +26 -0
  289. package/src/core/middleware/built-in/adapters/cache/memory.ts +73 -0
  290. package/src/core/middleware/built-in/adapters/cache/redis.ts +103 -0
  291. package/src/core/middleware/built-in/adapters/cdn/azure.ts +68 -0
  292. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +100 -0
  293. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +92 -0
  294. package/src/core/middleware/built-in/adapters/cdn/index.ts +23 -0
  295. package/src/core/middleware/built-in/adapters/index.ts +7 -0
  296. package/src/core/middleware/built-in/auth.ts +39 -0
  297. package/src/core/middleware/built-in/cache.ts +228 -0
  298. package/src/core/middleware/built-in/cdn.ts +151 -0
  299. package/src/core/middleware/built-in/cookie.ts +90 -0
  300. package/src/core/middleware/built-in/cors.ts +38 -0
  301. package/src/core/middleware/built-in/csp.ts +107 -0
  302. package/src/core/middleware/built-in/csrf.ts +87 -0
  303. package/src/core/middleware/built-in/error-tracker.ts +16 -0
  304. package/src/core/middleware/built-in/index.ts +57 -0
  305. package/src/core/middleware/built-in/performance-monitor.ts +25 -0
  306. package/src/core/middleware/built-in/rate-limit.ts +60 -0
  307. package/src/core/middleware/built-in/request-logger.ts +14 -0
  308. package/src/core/middleware/built-in/session.ts +311 -0
  309. package/src/core/middleware/built-in/sse.ts +91 -0
  310. package/src/core/middleware/built-in/validation.ts +33 -0
  311. package/src/core/middleware/index.ts +188 -0
  312. package/src/core/modules/auto-discovery.ts +265 -0
  313. package/src/core/modules/index.ts +6 -0
  314. package/src/core/modules/modules.ts +125 -0
  315. package/src/core/networking/index.ts +7 -0
  316. package/src/core/networking/service-discovery.ts +309 -0
  317. package/src/core/networking/websocket-manager.ts +259 -0
  318. package/src/core/routing/app-integration.ts +229 -0
  319. package/src/core/routing/index.ts +519 -0
  320. package/src/core/runtime/aws-lambda-adapter.ts +157 -0
  321. package/src/core/runtime/base-adapter.ts +140 -0
  322. package/src/core/runtime/cloudflare-workers-adapter.ts +166 -0
  323. package/src/core/runtime/index.ts +74 -0
  324. package/src/core/runtime/node-adapter.ts +210 -0
  325. package/src/core/runtime/vercel-edge-adapter.ts +125 -0
  326. package/src/core/utilities/circuit-breaker.ts +46 -0
  327. package/src/core/utilities/container.ts +760 -0
  328. package/src/core/utilities/hooks.ts +148 -0
  329. package/src/core/utilities/index.ts +16 -0
  330. package/src/core/validation/index.ts +216 -0
  331. package/src/index.ts +120 -0
  332. package/src/moro.ts +842 -0
  333. package/src/types/cache.ts +38 -0
  334. package/src/types/cdn.ts +22 -0
  335. package/src/types/core.ts +17 -0
  336. package/src/types/database.ts +40 -0
  337. package/src/types/discovery.ts +7 -0
  338. package/src/types/events.ts +90 -0
  339. package/src/types/hooks.ts +47 -0
  340. package/src/types/http.ts +70 -0
  341. package/src/types/logger.ts +109 -0
  342. package/src/types/module.ts +87 -0
  343. package/src/types/runtime.ts +91 -0
  344. package/src/types/session.ts +89 -0
  345. package/tsconfig.json +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/events/index.ts"],"names":[],"mappings":";;;AAAA,qCAAqC;AACrC,yCAA2C;AAAlC,yGAAA,YAAY,OAAA"}
@@ -0,0 +1,57 @@
1
+ import { Server as SocketIOServer } from "socket.io";
2
+ import { EventEmitter } from "events";
3
+ import { MoroHttpServer } from "./http";
4
+ import { ModuleConfig } from "../types/module";
5
+ import { LoggerOptions } from "../types/logger";
6
+ export interface MoroOptions {
7
+ http2?: boolean;
8
+ https?: {
9
+ key: string | Buffer;
10
+ cert: string | Buffer;
11
+ ca?: string | Buffer;
12
+ };
13
+ compression?: {
14
+ enabled?: boolean;
15
+ threshold?: number;
16
+ };
17
+ websocket?: {
18
+ compression?: boolean;
19
+ customIdGenerator?: () => string;
20
+ };
21
+ logger?: LoggerOptions | boolean;
22
+ }
23
+ export declare class Moro extends EventEmitter {
24
+ private httpServer;
25
+ private server;
26
+ private io;
27
+ private container;
28
+ private moduleLoader;
29
+ private websocketManager;
30
+ private circuitBreakers;
31
+ private rateLimiters;
32
+ private ioInstance;
33
+ private eventBus;
34
+ private logger;
35
+ private options;
36
+ constructor(options?: MoroOptions);
37
+ use(middleware: any): this;
38
+ private setupCore;
39
+ private requestTrackingMiddleware;
40
+ private errorBoundaryMiddleware;
41
+ addMiddleware(middleware: any): this;
42
+ registerDatabase(adapter: any): this;
43
+ getHttpServer(): MoroHttpServer;
44
+ getIOServer(): SocketIOServer<import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, any>;
45
+ loadModule(moduleConfig: ModuleConfig): Promise<void>;
46
+ private registerServices;
47
+ private createModuleRouter;
48
+ private createResilientHandler;
49
+ private mountRouter;
50
+ private setupWebSocketHandlers;
51
+ private checkRateLimit;
52
+ private getCircuitBreaker;
53
+ listen(port: number, callback?: () => void): void;
54
+ listen(port: number, host: string, callback?: () => void): void;
55
+ set(key: string, value: any): void;
56
+ get(key: string): any;
57
+ }
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Moro = void 0;
4
+ const http2_1 = require("http2");
5
+ const socket_io_1 = require("socket.io");
6
+ const events_1 = require("events");
7
+ const http_1 = require("./http");
8
+ const http_2 = require("./http");
9
+ const utilities_1 = require("./utilities");
10
+ const modules_1 = require("./modules");
11
+ const networking_1 = require("./networking");
12
+ const utilities_2 = require("./utilities");
13
+ const events_2 = require("./events");
14
+ const logger_1 = require("./logger");
15
+ class Moro extends events_1.EventEmitter {
16
+ constructor(options = {}) {
17
+ super();
18
+ this.circuitBreakers = new Map();
19
+ this.rateLimiters = new Map();
20
+ this.options = options;
21
+ // Configure global logger based on options
22
+ if (options.logger !== undefined) {
23
+ if (options.logger === false) {
24
+ // Disable logging by setting level to fatal (highest level)
25
+ logger_1.logger.setLevel("fatal");
26
+ }
27
+ else if (typeof options.logger === "object") {
28
+ // Configure logger with provided options
29
+ if (options.logger.level) {
30
+ logger_1.logger.setLevel(options.logger.level);
31
+ }
32
+ // Additional logger options can be configured here in the future
33
+ // For now, we focus on the level setting which is the most common need
34
+ }
35
+ }
36
+ // Initialize framework logger after global configuration
37
+ this.logger = (0, logger_1.createFrameworkLogger)("Core");
38
+ this.httpServer = new http_1.MoroHttpServer();
39
+ // Create HTTP/2 or HTTP/1.1 server based on options
40
+ if (options.http2) {
41
+ if (options.https) {
42
+ this.server = (0, http2_1.createSecureServer)(options.https);
43
+ }
44
+ else {
45
+ this.server = (0, http2_1.createServer)();
46
+ }
47
+ // Handle HTTP/2 streams manually
48
+ this.server.on("stream", (stream, headers) => {
49
+ // Convert HTTP/2 stream to HTTP/1.1-like request/response
50
+ const req = stream;
51
+ const res = stream;
52
+ req.url = headers[":path"];
53
+ req.method = headers[":method"];
54
+ req.headers = headers;
55
+ this.httpServer["handleRequest"](req, res);
56
+ });
57
+ this.logger.info("HTTP/2 server created", "ServerInit");
58
+ }
59
+ else {
60
+ this.server = this.httpServer.getServer();
61
+ }
62
+ this.io = new socket_io_1.Server(this.server, {
63
+ cors: { origin: "*" },
64
+ path: "/socket.io/",
65
+ });
66
+ this.ioInstance = this.io;
67
+ this.container = new utilities_1.Container();
68
+ this.moduleLoader = new modules_1.ModuleLoader(this.container);
69
+ this.websocketManager = new networking_1.WebSocketManager(this.io, this.container);
70
+ // Configure WebSocket advanced features
71
+ if (options.websocket?.customIdGenerator) {
72
+ this.websocketManager.setCustomIdGenerator(options.websocket.customIdGenerator);
73
+ }
74
+ if (options.websocket?.compression) {
75
+ this.websocketManager.enableCompression();
76
+ }
77
+ // Initialize enterprise event bus
78
+ this.eventBus = new events_2.MoroEventBus({
79
+ maxListeners: 200,
80
+ enableMetrics: true,
81
+ isolation: "module",
82
+ });
83
+ // Register event bus in DI container as factory
84
+ this.container.register("eventBus", () => this.eventBus);
85
+ this.setupCore();
86
+ }
87
+ // Middleware support
88
+ use(middleware) {
89
+ this.httpServer.use(middleware);
90
+ return this;
91
+ }
92
+ setupCore() {
93
+ // Security middleware
94
+ this.httpServer.use(http_1.middleware.helmet());
95
+ this.httpServer.use(http_1.middleware.cors());
96
+ // Performance middleware
97
+ this.httpServer.use(http_1.middleware.compression());
98
+ this.httpServer.use(http_1.middleware.bodySize({ limit: "10mb" }));
99
+ // Request tracking middleware
100
+ this.httpServer.use(this.requestTrackingMiddleware());
101
+ // Error boundary middleware
102
+ this.httpServer.use(this.errorBoundaryMiddleware());
103
+ }
104
+ requestTrackingMiddleware() {
105
+ return (req, res, next) => {
106
+ const startTime = Date.now();
107
+ res.on("finish", () => {
108
+ const duration = Date.now() - startTime;
109
+ this.logger.info(`${req.method} ${req.path} - ${res.statusCode} - ${duration}ms [${req.requestId}]`);
110
+ });
111
+ next();
112
+ };
113
+ }
114
+ errorBoundaryMiddleware() {
115
+ return async (req, res, next) => {
116
+ try {
117
+ next();
118
+ }
119
+ catch (error) {
120
+ this.logger.error("Error:", error.message, error.stack);
121
+ if (!res.headersSent) {
122
+ res.status(500).json({
123
+ success: false,
124
+ error: "Internal server error",
125
+ requestId: req.requestId,
126
+ });
127
+ }
128
+ }
129
+ };
130
+ }
131
+ // Public API for adding middleware
132
+ addMiddleware(middleware) {
133
+ this.httpServer.use(middleware);
134
+ this.emit("middleware:added", { middleware });
135
+ return this;
136
+ }
137
+ // Public API for database registration
138
+ registerDatabase(adapter) {
139
+ this.container.register("database", () => adapter, true);
140
+ this.emit("database:registered", { adapter });
141
+ return this;
142
+ }
143
+ // Public API for accessing HTTP server
144
+ getHttpServer() {
145
+ return this.httpServer;
146
+ }
147
+ // Public API for accessing Socket.IO server
148
+ getIOServer() {
149
+ return this.io;
150
+ }
151
+ async loadModule(moduleConfig) {
152
+ this.logger.info(`Loading module: ${moduleConfig.name}@${moduleConfig.version}`, "ModuleLoader");
153
+ // Create module event bus once during module loading
154
+ const moduleEventBus = this.eventBus.createModuleBus(moduleConfig.name);
155
+ // Register services in DI container
156
+ this.registerServices(moduleConfig);
157
+ // Create module router with resilience patterns
158
+ const router = await this.createModuleRouter(moduleConfig, moduleEventBus);
159
+ // Setup WebSocket handlers
160
+ if (moduleConfig.websockets) {
161
+ await this.setupWebSocketHandlers(moduleConfig);
162
+ }
163
+ // Mount with versioning
164
+ this.logger.debug(`Module version before basePath: "${moduleConfig.version}"`, "ModuleLoader");
165
+ const basePath = `/api/v${moduleConfig.version}/${moduleConfig.name}`;
166
+ this.logger.debug(`Generated basePath: "${basePath}"`, "ModuleLoader");
167
+ this.mountRouter(basePath, router);
168
+ this.logger.info(`Module loaded: ${moduleConfig.name}`, "ModuleLoader");
169
+ this.emit("moduleLoaded", moduleConfig.name);
170
+ }
171
+ registerServices(config) {
172
+ if (!config.services)
173
+ return;
174
+ for (const service of config.services) {
175
+ const factory = () => {
176
+ const dependencies = (service.dependencies || []).map((dep) => this.container.resolve(dep));
177
+ return new service.implementation(...dependencies);
178
+ };
179
+ this.container.register(service.name, factory, service.singleton || false);
180
+ }
181
+ // Register functional route handlers if they exist
182
+ if (config.routeHandlers) {
183
+ for (const [name, handler] of Object.entries(config.routeHandlers)) {
184
+ this.container.register(name, () => handler, false);
185
+ }
186
+ }
187
+ // Register functional socket handlers if they exist
188
+ if (config.socketHandlers) {
189
+ for (const [name, handler] of Object.entries(config.socketHandlers)) {
190
+ this.container.register(name, () => handler, false);
191
+ }
192
+ }
193
+ }
194
+ async createModuleRouter(config, moduleEventBus) {
195
+ const router = new http_2.Router();
196
+ this.logger.debug(`Creating router for module: ${config.name}`, "Router");
197
+ this.logger.debug(`Module has ${config.routes?.length || 0} routes`, "Router");
198
+ if (!config.routes)
199
+ return router;
200
+ for (const route of config.routes) {
201
+ this.logger.debug(`Adding route: ${route.method} ${route.path} -> ${route.handler}`, "Router");
202
+ const handler = await this.createResilientHandler(route, config, moduleEventBus);
203
+ const method = route.method.toLowerCase();
204
+ // Add route to router
205
+ router[method](route.path, handler);
206
+ }
207
+ this.logger.debug(`Router created with ${router.getRoutes().length} total routes`, "Router");
208
+ return router;
209
+ }
210
+ async createResilientHandler(route, config, moduleEventBus) {
211
+ const handlerKey = `${config.name}.${route.handler}`;
212
+ return async (req, res) => {
213
+ const requestId = req.headers["x-request-id"] || Math.random().toString(36);
214
+ try {
215
+ // Try to get functional handler first, then fall back to service-based
216
+ let handler;
217
+ let useEnhancedReq = false;
218
+ if (config.routeHandlers && config.routeHandlers[route.handler]) {
219
+ // New functional handler
220
+ handler = config.routeHandlers[route.handler];
221
+ useEnhancedReq = true;
222
+ this.logger.debug(`Using functional handler: ${route.handler}`, "Handler", {
223
+ availableHandlers: Object.keys(config.routeHandlers || {}),
224
+ });
225
+ }
226
+ else if (this.container.has(config.name)) {
227
+ // Old service-based handler
228
+ const service = this.container.resolve(config.name);
229
+ handler = service[route.handler];
230
+ this.logger.debug(`Using service handler: ${config.name}.${route.handler}`, "Handler");
231
+ }
232
+ else {
233
+ this.logger.error(`No handler found for route ${route.method} ${route.path}`, "Handler", {
234
+ routeHandlers: Object.keys(config.routeHandlers || {}),
235
+ containerHasModule: this.container.has(config.name),
236
+ });
237
+ throw new Error(`Handler ${route.handler} not found for module ${config.name}`);
238
+ }
239
+ if (!handler || typeof handler !== "function") {
240
+ throw new Error(`Handler ${route.handler} is not a function`);
241
+ }
242
+ // Validate request if validation schema is provided
243
+ if (route.validation) {
244
+ try {
245
+ // Validate body
246
+ if (route.validation.body && req.body !== undefined) {
247
+ req.body = route.validation.body.parse(req.body);
248
+ }
249
+ // Validate query
250
+ if (route.validation.query && req.query !== undefined) {
251
+ req.query = route.validation.query.parse(req.query);
252
+ }
253
+ // Validate params
254
+ if (route.validation.params && req.params !== undefined) {
255
+ req.params = route.validation.params.parse(req.params);
256
+ }
257
+ // Validate headers
258
+ if (route.validation.headers && req.headers !== undefined) {
259
+ req.headers = route.validation.headers.parse(req.headers);
260
+ }
261
+ this.logger.debug("Module route validation passed", "ModuleValidation", {
262
+ route: `${route.method} ${route.path}`,
263
+ module: config.name,
264
+ });
265
+ }
266
+ catch (validationError) {
267
+ if (validationError.issues) {
268
+ this.logger.debug("Module route validation failed", "ModuleValidation", {
269
+ route: `${route.method} ${route.path}`,
270
+ module: config.name,
271
+ errors: validationError.issues.length,
272
+ });
273
+ res.status(400).json({
274
+ success: false,
275
+ error: "Validation failed",
276
+ details: validationError.issues.map((issue) => ({
277
+ field: issue.path.length > 0 ? issue.path.join(".") : "request",
278
+ message: issue.message,
279
+ code: issue.code,
280
+ })),
281
+ requestId,
282
+ });
283
+ return;
284
+ }
285
+ throw validationError;
286
+ }
287
+ }
288
+ // Prepare request object based on handler type
289
+ let requestToUse = req;
290
+ if (useEnhancedReq) {
291
+ // Use the pre-created module event bus
292
+ requestToUse = {
293
+ ...req,
294
+ database: this.container.has("database")
295
+ ? this.container.resolve("database")
296
+ : undefined,
297
+ events: moduleEventBus, // Use pre-created event bus
298
+ app: {
299
+ get: (key) => key === "io" ? this.ioInstance : undefined,
300
+ },
301
+ };
302
+ this.logger.debug(`Database available: ${!!requestToUse.database}`, "Handler", {
303
+ moduleId: config.name,
304
+ });
305
+ }
306
+ // Execute with circuit breaker
307
+ const circuitBreaker = this.getCircuitBreaker(handlerKey);
308
+ const result = await circuitBreaker.execute(() => handler(requestToUse, res));
309
+ // For functional handlers, ensure the response is sent
310
+ if (useEnhancedReq &&
311
+ result !== undefined &&
312
+ result !== null &&
313
+ !res.headersSent) {
314
+ this.logger.debug(`Sending functional handler result`, "Handler", {
315
+ result,
316
+ });
317
+ res.json(result);
318
+ }
319
+ return result;
320
+ }
321
+ catch (error) {
322
+ this.logger.error(`Route handler error [${requestId}]: ${error.message}`, "Handler", {
323
+ requestId,
324
+ handlerKey,
325
+ stack: error.stack,
326
+ });
327
+ if (!res.headersSent) {
328
+ res.status(500).json({
329
+ success: false,
330
+ error: "Internal server error",
331
+ requestId,
332
+ });
333
+ }
334
+ throw error;
335
+ }
336
+ };
337
+ }
338
+ mountRouter(basePath, router) {
339
+ this.logger.debug(`Mounting router for basePath: ${basePath}`, "Router");
340
+ // Enterprise-grade middleware integration with performance optimization
341
+ this.httpServer.use(async (req, res, next) => {
342
+ if (req.path.startsWith(basePath)) {
343
+ this.logger.debug(`Module middleware handling: ${req.method} ${req.path}`, "Middleware", {
344
+ basePath,
345
+ });
346
+ try {
347
+ const handled = await router.handle(req, res, basePath);
348
+ this.logger.debug(`Route handled: ${handled}`, "Router");
349
+ if (!handled) {
350
+ next(); // Let other middleware handle it
351
+ }
352
+ // If handled, the router already sent the response, so don't call next()
353
+ }
354
+ catch (error) {
355
+ this.logger.error("Router error", "Router", {
356
+ error: error instanceof Error ? error.message : String(error),
357
+ });
358
+ if (!res.headersSent) {
359
+ res
360
+ .status(500)
361
+ .json({ success: false, error: "Internal server error" });
362
+ }
363
+ }
364
+ }
365
+ else {
366
+ next();
367
+ }
368
+ });
369
+ this.logger.info(`Router mounted for ${basePath}`, "Router");
370
+ }
371
+ async setupWebSocketHandlers(config) {
372
+ const namespace = this.io.of(`/${config.name}`);
373
+ for (const wsConfig of config.websockets || []) {
374
+ await this.websocketManager.registerHandler(namespace, wsConfig, config);
375
+ }
376
+ }
377
+ checkRateLimit(identifier, rateLimit) {
378
+ if (!this.rateLimiters.has(identifier)) {
379
+ this.rateLimiters.set(identifier, new Map());
380
+ }
381
+ const handlerLimiter = this.rateLimiters.get(identifier);
382
+ const now = Date.now();
383
+ const limit = handlerLimiter.get(identifier);
384
+ if (!limit || now > limit.resetTime) {
385
+ handlerLimiter.set(identifier, {
386
+ count: 1,
387
+ resetTime: now + rateLimit.window,
388
+ });
389
+ return true;
390
+ }
391
+ if (limit.count >= rateLimit.requests) {
392
+ return false;
393
+ }
394
+ limit.count++;
395
+ return true;
396
+ }
397
+ getCircuitBreaker(key) {
398
+ if (!this.circuitBreakers.has(key)) {
399
+ this.circuitBreakers.set(key, new utilities_2.CircuitBreaker({
400
+ failureThreshold: 5,
401
+ resetTimeout: 30000,
402
+ monitoringPeriod: 10000,
403
+ }));
404
+ }
405
+ return this.circuitBreakers.get(key);
406
+ }
407
+ listen(port, host, callback) {
408
+ if (typeof host === "function") {
409
+ this.httpServer.listen(port, host);
410
+ }
411
+ else if (host) {
412
+ this.httpServer.listen(port, host, callback);
413
+ }
414
+ else {
415
+ this.httpServer.listen(port, callback);
416
+ }
417
+ }
418
+ // Compatibility method for existing controllers
419
+ set(key, value) {
420
+ if (key === "io") {
421
+ this.ioInstance = value;
422
+ }
423
+ }
424
+ get(key) {
425
+ if (key === "io") {
426
+ return this.ioInstance;
427
+ }
428
+ return undefined;
429
+ }
430
+ }
431
+ exports.Moro = Moro;
432
+ //# sourceMappingURL=framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/core/framework.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { Server } from "http";
2
+ import { HttpHandler, Middleware } from "../../types/http";
3
+ export declare class MoroHttpServer {
4
+ private server;
5
+ private routes;
6
+ private globalMiddleware;
7
+ private compressionEnabled;
8
+ private compressionThreshold;
9
+ private logger;
10
+ constructor();
11
+ use(middleware: Middleware): void;
12
+ get(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
13
+ post(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
14
+ put(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
15
+ delete(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
16
+ patch(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
17
+ private addRoute;
18
+ private pathToRegex;
19
+ private handleRequest;
20
+ private enhanceRequest;
21
+ private parseCookies;
22
+ private enhanceResponse;
23
+ private getMimeType;
24
+ private addCharsetIfNeeded;
25
+ private parseBody;
26
+ private parseMultipart;
27
+ private parseUrlEncoded;
28
+ private findRoute;
29
+ private executeMiddleware;
30
+ listen(port: number, callback?: () => void): void;
31
+ listen(port: number, host: string, callback?: () => void): void;
32
+ close(): Promise<void>;
33
+ getServer(): Server;
34
+ }
35
+ export declare const middleware: {
36
+ cors: (options?: {
37
+ origin?: string;
38
+ credentials?: boolean;
39
+ }) => Middleware;
40
+ helmet: () => Middleware;
41
+ compression: (options?: {
42
+ threshold?: number;
43
+ level?: number;
44
+ }) => Middleware;
45
+ requestLogger: () => Middleware;
46
+ bodySize: (options?: {
47
+ limit?: string;
48
+ }) => Middleware;
49
+ static: (options: {
50
+ root: string;
51
+ maxAge?: number;
52
+ index?: string[];
53
+ dotfiles?: "allow" | "deny" | "ignore";
54
+ etag?: boolean;
55
+ }) => Middleware;
56
+ upload: (options?: {
57
+ dest?: string;
58
+ maxFileSize?: number;
59
+ maxFiles?: number;
60
+ allowedTypes?: string[];
61
+ }) => Middleware;
62
+ template: (options: {
63
+ views: string;
64
+ engine?: "moro" | "handlebars" | "ejs";
65
+ cache?: boolean;
66
+ defaultLayout?: string;
67
+ }) => Middleware;
68
+ http2Push: (options?: {
69
+ resources?: Array<{
70
+ path: string;
71
+ as: string;
72
+ type?: string;
73
+ }>;
74
+ condition?: (req: any) => boolean;
75
+ }) => Middleware;
76
+ sse: (options?: {
77
+ heartbeat?: number;
78
+ retry?: number;
79
+ cors?: boolean;
80
+ }) => Middleware;
81
+ range: (options?: {
82
+ acceptRanges?: string;
83
+ maxRanges?: number;
84
+ }) => Middleware;
85
+ csrf: (options?: {
86
+ secret?: string;
87
+ tokenLength?: number;
88
+ cookieName?: string;
89
+ headerName?: string;
90
+ ignoreMethods?: string[];
91
+ sameSite?: boolean;
92
+ }) => Middleware;
93
+ csp: (options?: {
94
+ directives?: {
95
+ defaultSrc?: string[];
96
+ scriptSrc?: string[];
97
+ styleSrc?: string[];
98
+ imgSrc?: string[];
99
+ connectSrc?: string[];
100
+ fontSrc?: string[];
101
+ objectSrc?: string[];
102
+ mediaSrc?: string[];
103
+ frameSrc?: string[];
104
+ childSrc?: string[];
105
+ workerSrc?: string[];
106
+ formAction?: string[];
107
+ upgradeInsecureRequests?: boolean;
108
+ blockAllMixedContent?: boolean;
109
+ };
110
+ reportOnly?: boolean;
111
+ reportUri?: string;
112
+ nonce?: boolean;
113
+ }) => Middleware;
114
+ };