@morojs/moro 1.6.2 → 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 (366) hide show
  1. package/dist/core/http/http-server.js +12 -9
  2. package/dist/core/http/http-server.js.map +1 -1
  3. package/dist/core/http/uws-http-server.js +1 -1
  4. package/dist/core/http/uws-http-server.js.map +1 -1
  5. package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
  6. package/dist/core/middleware/built-in/auth/core.js +358 -0
  7. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  8. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
  9. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  10. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  11. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  12. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  13. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  14. package/dist/core/middleware/built-in/auth/index.js +15 -0
  15. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  16. package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
  17. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  18. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  19. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  20. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  21. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  22. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
  23. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  24. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  25. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
  26. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  27. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
  28. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  29. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  30. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
  31. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  32. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
  33. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
  34. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  35. package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
  36. package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
  37. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  38. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  39. package/dist/core/middleware/built-in/cache/core.js +87 -0
  40. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  41. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  42. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
  43. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  44. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  45. package/dist/core/middleware/built-in/cache/index.js +9 -0
  46. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  47. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  48. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  49. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  50. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  51. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
  52. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  53. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  54. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
  55. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  56. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
  57. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
  58. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  59. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
  60. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  61. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  62. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
  63. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  64. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  65. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  66. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  67. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  68. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  69. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  70. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  71. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  72. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  73. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  74. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  75. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  76. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  77. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  78. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  79. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  80. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  81. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  82. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  83. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  84. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  85. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  86. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  87. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  88. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  89. package/dist/core/middleware/built-in/cors/core.js +51 -0
  90. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  91. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  92. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  93. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  94. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  95. package/dist/core/middleware/built-in/cors/index.js +9 -0
  96. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  97. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  98. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  99. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  100. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  101. package/dist/core/middleware/built-in/csp/core.js +88 -0
  102. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  103. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  104. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  105. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  106. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  107. package/dist/core/middleware/built-in/csp/index.js +9 -0
  108. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  109. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  110. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  111. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  112. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  113. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  114. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  115. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  116. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  117. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  118. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  119. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  120. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  121. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  122. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  123. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  124. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  125. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  126. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  127. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  128. package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
  129. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  130. package/dist/core/middleware/built-in/index.d.ts +25 -59
  131. package/dist/core/middleware/built-in/index.js +31 -31
  132. package/dist/core/middleware/built-in/index.js.map +1 -1
  133. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  134. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  135. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  136. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  137. package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
  138. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  139. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  140. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  141. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  142. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  143. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
  144. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  145. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  146. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  147. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  148. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  149. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  150. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  151. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  152. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  153. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  154. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  155. package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
  156. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  157. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  158. package/dist/core/middleware/built-in/session/core.js +227 -0
  159. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  160. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  161. package/dist/core/middleware/built-in/session/hook.js +53 -0
  162. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  163. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  164. package/dist/core/middleware/built-in/session/index.js +9 -0
  165. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  166. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  167. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  168. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  169. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  170. package/dist/core/middleware/built-in/sse/core.js +117 -0
  171. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  172. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  173. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  174. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  175. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  176. package/dist/core/middleware/built-in/sse/index.js +9 -0
  177. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  178. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  179. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  180. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  181. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  182. package/dist/core/middleware/built-in/validation/core.js +93 -0
  183. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  184. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  185. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
  186. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  187. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  188. package/dist/core/middleware/built-in/validation/index.js +9 -0
  189. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  190. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  191. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  192. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  193. package/dist/core/middleware/index.js +6 -0
  194. package/dist/core/middleware/index.js.map +1 -1
  195. package/dist/core/routing/unified-router.d.ts +4 -20
  196. package/dist/core/routing/unified-router.js +61 -106
  197. package/dist/core/routing/unified-router.js.map +1 -1
  198. package/dist/index.d.ts +3 -2
  199. package/dist/index.js +3 -2
  200. package/dist/index.js.map +1 -1
  201. package/dist/moro.js +12 -18
  202. package/dist/moro.js.map +1 -1
  203. package/dist/types/hooks.d.ts +3 -0
  204. package/package.json +2 -6
  205. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  206. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  207. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  208. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  209. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  210. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  211. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  212. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  213. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  214. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  215. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  216. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  217. package/dist/core/middleware/built-in/auth.js +0 -348
  218. package/dist/core/middleware/built-in/auth.js.map +0 -1
  219. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  220. package/dist/core/middleware/built-in/cache.js.map +0 -1
  221. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  222. package/dist/core/middleware/built-in/cdn.js +0 -109
  223. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  224. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  225. package/dist/core/middleware/built-in/cookie.js +0 -64
  226. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  227. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  228. package/dist/core/middleware/built-in/cors.js +0 -25
  229. package/dist/core/middleware/built-in/cors.js.map +0 -1
  230. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  231. package/dist/core/middleware/built-in/csp.js +0 -68
  232. package/dist/core/middleware/built-in/csp.js.map +0 -1
  233. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  234. package/dist/core/middleware/built-in/csrf.js +0 -60
  235. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  236. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  237. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  238. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  239. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  240. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  241. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  242. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  243. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  244. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  245. package/dist/core/middleware/built-in/session.d.ts +0 -41
  246. package/dist/core/middleware/built-in/session.js +0 -205
  247. package/dist/core/middleware/built-in/session.js.map +0 -1
  248. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  249. package/dist/core/middleware/built-in/sse.js +0 -69
  250. package/dist/core/middleware/built-in/sse.js.map +0 -1
  251. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  252. package/dist/core/middleware/built-in/validation.js.map +0 -1
  253. package/jest.config.mjs +0 -41
  254. package/src/core/auth/README.md +0 -339
  255. package/src/core/auth/morojs-adapter.ts +0 -415
  256. package/src/core/config/config-manager.ts +0 -133
  257. package/src/core/config/config-sources.ts +0 -600
  258. package/src/core/config/config-validator.ts +0 -1116
  259. package/src/core/config/file-loader.ts +0 -150
  260. package/src/core/config/index.ts +0 -109
  261. package/src/core/config/schema.ts +0 -164
  262. package/src/core/config/utils.ts +0 -244
  263. package/src/core/database/README.md +0 -238
  264. package/src/core/database/adapters/drizzle.ts +0 -415
  265. package/src/core/database/adapters/index.ts +0 -42
  266. package/src/core/database/adapters/mongodb.ts +0 -317
  267. package/src/core/database/adapters/mysql.ts +0 -235
  268. package/src/core/database/adapters/postgresql.ts +0 -226
  269. package/src/core/database/adapters/redis.ts +0 -379
  270. package/src/core/database/adapters/sqlite.ts +0 -263
  271. package/src/core/database/index.ts +0 -3
  272. package/src/core/docs/index.ts +0 -231
  273. package/src/core/docs/openapi-generator.ts +0 -576
  274. package/src/core/docs/schema-to-openapi.ts +0 -145
  275. package/src/core/docs/simple-docs.ts +0 -295
  276. package/src/core/docs/swagger-ui.ts +0 -354
  277. package/src/core/docs/zod-to-openapi.ts +0 -532
  278. package/src/core/events/event-bus.ts +0 -231
  279. package/src/core/events/index.ts +0 -12
  280. package/src/core/framework.ts +0 -885
  281. package/src/core/http/http-server.ts +0 -1847
  282. package/src/core/http/index.ts +0 -7
  283. package/src/core/http/uws-http-server.ts +0 -591
  284. package/src/core/logger/filters.ts +0 -153
  285. package/src/core/logger/index.ts +0 -21
  286. package/src/core/logger/logger.ts +0 -1033
  287. package/src/core/logger/outputs.ts +0 -132
  288. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  289. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  290. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  291. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
  292. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  293. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  294. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
  295. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  296. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  297. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  298. package/src/core/middleware/built-in/auth.ts +0 -410
  299. package/src/core/middleware/built-in/cache.ts +0 -213
  300. package/src/core/middleware/built-in/cdn.ts +0 -124
  301. package/src/core/middleware/built-in/cookie.ts +0 -85
  302. package/src/core/middleware/built-in/cors.ts +0 -38
  303. package/src/core/middleware/built-in/csp.ts +0 -101
  304. package/src/core/middleware/built-in/csrf.ts +0 -82
  305. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  306. package/src/core/middleware/built-in/index.ts +0 -87
  307. package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
  308. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  309. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  310. package/src/core/middleware/built-in/request-logger.ts +0 -16
  311. package/src/core/middleware/built-in/session.ts +0 -287
  312. package/src/core/middleware/built-in/sse.ts +0 -88
  313. package/src/core/middleware/built-in/validation.ts +0 -33
  314. package/src/core/middleware/index.ts +0 -177
  315. package/src/core/modules/auto-discovery.ts +0 -726
  316. package/src/core/modules/index.ts +0 -3
  317. package/src/core/modules/modules.ts +0 -135
  318. package/src/core/networking/adapters/index.ts +0 -17
  319. package/src/core/networking/adapters/socketio-adapter.ts +0 -254
  320. package/src/core/networking/adapters/uws-adapter.ts +0 -619
  321. package/src/core/networking/adapters/ws-adapter.ts +0 -429
  322. package/src/core/networking/index.ts +0 -4
  323. package/src/core/networking/service-discovery.ts +0 -303
  324. package/src/core/networking/websocket-adapter.ts +0 -217
  325. package/src/core/networking/websocket-manager.ts +0 -308
  326. package/src/core/pooling/object-pool-manager.ts +0 -630
  327. package/src/core/routing/app-integration.ts +0 -164
  328. package/src/core/routing/index.ts +0 -261
  329. package/src/core/routing/path-matcher.ts +0 -222
  330. package/src/core/routing/router.ts +0 -97
  331. package/src/core/routing/unified-router.ts +0 -870
  332. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  333. package/src/core/runtime/base-adapter.ts +0 -130
  334. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  335. package/src/core/runtime/index.ts +0 -62
  336. package/src/core/runtime/node-adapter.ts +0 -202
  337. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  338. package/src/core/utilities/circuit-breaker.ts +0 -46
  339. package/src/core/utilities/container.ts +0 -736
  340. package/src/core/utilities/hooks.ts +0 -142
  341. package/src/core/utilities/index.ts +0 -17
  342. package/src/core/utilities/package-utils.ts +0 -59
  343. package/src/core/validation/adapters.ts +0 -147
  344. package/src/core/validation/index.ts +0 -258
  345. package/src/core/validation/schema-interface.ts +0 -100
  346. package/src/index.ts +0 -233
  347. package/src/moro.ts +0 -1728
  348. package/src/types/auth.ts +0 -440
  349. package/src/types/cache.ts +0 -38
  350. package/src/types/cdn.ts +0 -22
  351. package/src/types/config.ts +0 -229
  352. package/src/types/core.ts +0 -58
  353. package/src/types/database.ts +0 -32
  354. package/src/types/discovery.ts +0 -7
  355. package/src/types/events.ts +0 -82
  356. package/src/types/hooks.ts +0 -47
  357. package/src/types/http.ts +0 -89
  358. package/src/types/logger.ts +0 -102
  359. package/src/types/module.ts +0 -99
  360. package/src/types/runtime.ts +0 -76
  361. package/src/types/session.ts +0 -89
  362. package/tsconfig.json +0 -23
  363. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
  364. /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
  365. /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
  366. /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
@@ -1,870 +0,0 @@
1
- // Unified Router - Consolidates Intelligent Router and Core Router
2
- // Combines best features from both systems with zero breaking changes
3
-
4
- import { PathMatcher, CompiledPath } from './path-matcher.js';
5
- import { ObjectPoolManager } from '../pooling/object-pool-manager.js';
6
- import { createFrameworkLogger } from '../logger/index.js';
7
- import { HttpRequest, HttpResponse } from '../../types/http.js';
8
- import { ValidationSchema } from '../validation/schema-interface.js';
9
-
10
- const logger = createFrameworkLogger('UnifiedRouter');
11
-
12
- // ===== Types =====
13
-
14
- export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
15
- export type RouteHandler<T = any> = (req: HttpRequest, res: HttpResponse) => T | Promise<T>;
16
- export type Middleware = (
17
- req: HttpRequest,
18
- res: HttpResponse,
19
- next: () => void
20
- ) => void | Promise<void>;
21
-
22
- export interface ValidationConfig {
23
- body?: ValidationSchema;
24
- query?: ValidationSchema;
25
- params?: ValidationSchema;
26
- headers?: ValidationSchema;
27
- }
28
-
29
- export interface AuthConfig {
30
- roles?: string[];
31
- permissions?: string[];
32
- optional?: boolean;
33
- }
34
-
35
- export interface RateLimitConfig {
36
- requests: number;
37
- window: number;
38
- skipSuccessfulRequests?: boolean;
39
- }
40
-
41
- export interface CacheConfig {
42
- ttl: number;
43
- key?: string;
44
- tags?: string[];
45
- }
46
-
47
- export interface MiddlewarePhases {
48
- before?: Middleware[];
49
- after?: Middleware[];
50
- transform?: Middleware[];
51
- }
52
-
53
- export interface RouteSchema {
54
- method: HttpMethod;
55
- path: string;
56
- handler: RouteHandler;
57
- validation?: ValidationConfig;
58
- auth?: AuthConfig;
59
- rateLimit?: RateLimitConfig;
60
- cache?: CacheConfig;
61
- middleware?: MiddlewarePhases | Middleware[];
62
- description?: string;
63
- tags?: string[];
64
- }
65
-
66
- // Internal route representation
67
- interface InternalRoute {
68
- schema: RouteSchema;
69
- compiledPath: CompiledPath;
70
- isFastPath: boolean; // No middleware, auth, validation, rate limiting
71
- executionOrder: string[]; // Ordered list of execution phases
72
- }
73
-
74
- // ===== Route Builder (Chainable API) =====
75
-
76
- export class RouteBuilder {
77
- private schema: Partial<RouteSchema>;
78
- private router: UnifiedRouter;
79
-
80
- constructor(method: HttpMethod, path: string, router: UnifiedRouter) {
81
- this.schema = {
82
- method,
83
- path,
84
- middleware: {} as MiddlewarePhases,
85
- };
86
- this.router = router;
87
- }
88
-
89
- // Validation methods
90
- validate(config: ValidationConfig): this {
91
- this.schema.validation = { ...this.schema.validation, ...config };
92
- return this;
93
- }
94
-
95
- body<T>(schema: ValidationSchema<T>): this {
96
- if (!this.schema.validation) this.schema.validation = {};
97
- this.schema.validation.body = schema;
98
- return this;
99
- }
100
-
101
- query<T>(schema: ValidationSchema<T>): this {
102
- if (!this.schema.validation) this.schema.validation = {};
103
- this.schema.validation.query = schema;
104
- return this;
105
- }
106
-
107
- params<T>(schema: ValidationSchema<T>): this {
108
- if (!this.schema.validation) this.schema.validation = {};
109
- this.schema.validation.params = schema;
110
- return this;
111
- }
112
-
113
- headers<T>(schema: ValidationSchema<T>): this {
114
- if (!this.schema.validation) this.schema.validation = {};
115
- this.schema.validation.headers = schema;
116
- return this;
117
- }
118
-
119
- // Security methods
120
- auth(config: AuthConfig): this {
121
- this.schema.auth = config;
122
- return this;
123
- }
124
-
125
- rateLimit(config: RateLimitConfig): this {
126
- this.schema.rateLimit = config;
127
- return this;
128
- }
129
-
130
- // Caching
131
- cache(config: CacheConfig): this {
132
- this.schema.cache = config;
133
- return this;
134
- }
135
-
136
- // Custom middleware
137
- before(...middleware: Middleware[]): this {
138
- if (!this.schema.middleware) this.schema.middleware = {};
139
- const phases = this.schema.middleware as MiddlewarePhases;
140
- phases.before = [...(phases.before || []), ...middleware];
141
- return this;
142
- }
143
-
144
- after(...middleware: Middleware[]): this {
145
- if (!this.schema.middleware) this.schema.middleware = {};
146
- const phases = this.schema.middleware as MiddlewarePhases;
147
- phases.after = [...(phases.after || []), ...middleware];
148
- return this;
149
- }
150
-
151
- transform(...middleware: Middleware[]): this {
152
- if (!this.schema.middleware) this.schema.middleware = {};
153
- const phases = this.schema.middleware as MiddlewarePhases;
154
- phases.transform = [...(phases.transform || []), ...middleware];
155
- return this;
156
- }
157
-
158
- use(...middleware: Middleware[]): this {
159
- return this.after(...middleware);
160
- }
161
-
162
- // Metadata
163
- describe(description: string): this {
164
- this.schema.description = description;
165
- return this;
166
- }
167
-
168
- tag(...tags: string[]): this {
169
- this.schema.tags = [...(this.schema.tags || []), ...tags];
170
- return this;
171
- }
172
-
173
- // Terminal method
174
- handler<T>(handler: RouteHandler<T>): void {
175
- if (!handler) {
176
- throw new Error('Handler is required');
177
- }
178
-
179
- const completeSchema: RouteSchema = {
180
- ...(this.schema as RouteSchema),
181
- handler,
182
- };
183
-
184
- this.router.registerRoute(completeSchema);
185
- }
186
- }
187
-
188
- // ===== Unified Router =====
189
-
190
- export class UnifiedRouter {
191
- private static instance: UnifiedRouter | null = null;
192
-
193
- private readonly poolManager = ObjectPoolManager.getInstance();
194
-
195
- // Route storage optimized for different access patterns
196
- private staticRoutes = new Map<string, InternalRoute>(); // O(1) lookup: "GET:/api/users"
197
- private dynamicRoutesBySegments = new Map<number, InternalRoute[]>(); // Grouped by segment count
198
- private fastPathRoutes = new Set<InternalRoute>(); // Routes with no middleware
199
- private allRoutes: InternalRoute[] = []; // For iteration/inspection
200
-
201
- // Statistics
202
- private stats = {
203
- totalRoutes: 0,
204
- staticRoutes: 0,
205
- dynamicRoutes: 0,
206
- fastPathRoutes: 0,
207
- requestCount: 0,
208
- fastPathHits: 0,
209
- staticHits: 0,
210
- dynamicHits: 0,
211
- cacheHits: 0,
212
- };
213
-
214
- constructor() {
215
- logger.debug('UnifiedRouter initialized', 'Initialization');
216
- }
217
-
218
- /**
219
- * Get singleton instance (optional - can still create new instances)
220
- */
221
- static getInstance(): UnifiedRouter {
222
- if (!this.instance) {
223
- this.instance = new UnifiedRouter();
224
- logger.info(`UnifiedRouter initialized (PID: ${process.pid})`, 'Router');
225
- }
226
- return this.instance;
227
- }
228
-
229
- /**
230
- * Reset singleton (useful for testing)
231
- */
232
- static reset(): void {
233
- if (this.instance) {
234
- this.instance.clearAllRoutes();
235
- }
236
- this.instance = null;
237
- }
238
-
239
- /**
240
- * Clear all routes (useful for testing)
241
- */
242
- clearAllRoutes(): void {
243
- this.staticRoutes.clear();
244
- this.dynamicRoutesBySegments.clear();
245
- this.fastPathRoutes.clear();
246
- this.allRoutes = [];
247
- this.stats = {
248
- totalRoutes: 0,
249
- staticRoutes: 0,
250
- dynamicRoutes: 0,
251
- fastPathRoutes: 0,
252
- requestCount: 0,
253
- fastPathHits: 0,
254
- staticHits: 0,
255
- dynamicHits: 0,
256
- cacheHits: 0,
257
- };
258
- logger.debug('UnifiedRouter routes cleared', 'Reset');
259
- }
260
-
261
- // ===== Route Registration =====
262
-
263
- /**
264
- * Register a route (internal method)
265
- */
266
- registerRoute(schema: RouteSchema): void {
267
- // Compile path pattern
268
- const compiledPath = PathMatcher.compile(schema.path);
269
-
270
- // Determine if this is a fast-path route
271
- const isFastPath = this.isFastPathRoute(schema);
272
-
273
- // Determine execution order
274
- const executionOrder = this.buildExecutionOrder(schema);
275
-
276
- const route: InternalRoute = {
277
- schema,
278
- compiledPath,
279
- isFastPath,
280
- executionOrder,
281
- };
282
-
283
- // Store in appropriate structures
284
- if (compiledPath.isStatic) {
285
- const key = `${schema.method}:${schema.path}`;
286
- this.staticRoutes.set(key, route);
287
- this.stats.staticRoutes++;
288
- } else {
289
- // Group by segment count for faster matching
290
- const segmentCount = compiledPath.segments;
291
- if (!this.dynamicRoutesBySegments.has(segmentCount)) {
292
- this.dynamicRoutesBySegments.set(segmentCount, []);
293
- }
294
- this.dynamicRoutesBySegments.get(segmentCount)!.push(route);
295
- this.stats.dynamicRoutes++;
296
- }
297
-
298
- if (isFastPath) {
299
- this.fastPathRoutes.add(route);
300
- this.stats.fastPathRoutes++;
301
- }
302
-
303
- this.allRoutes.push(route);
304
- this.stats.totalRoutes++;
305
-
306
- logger.info(
307
- `Registered route: ${schema.method} ${schema.path} (PID: ${process.pid}, total: ${this.stats.totalRoutes})`,
308
- 'Registration',
309
- {
310
- isStatic: compiledPath.isStatic,
311
- isFastPath,
312
- segments: compiledPath.segments,
313
- }
314
- );
315
- }
316
-
317
- /**
318
- * Chainable API methods
319
- */
320
- get(path: string): RouteBuilder {
321
- return new RouteBuilder('GET', path, this);
322
- }
323
-
324
- post(path: string): RouteBuilder {
325
- return new RouteBuilder('POST', path, this);
326
- }
327
-
328
- put(path: string): RouteBuilder {
329
- return new RouteBuilder('PUT', path, this);
330
- }
331
-
332
- delete(path: string): RouteBuilder {
333
- return new RouteBuilder('DELETE', path, this);
334
- }
335
-
336
- patch(path: string): RouteBuilder {
337
- return new RouteBuilder('PATCH', path, this);
338
- }
339
-
340
- head(path: string): RouteBuilder {
341
- return new RouteBuilder('HEAD', path, this);
342
- }
343
-
344
- options(path: string): RouteBuilder {
345
- return new RouteBuilder('OPTIONS', path, this);
346
- }
347
-
348
- /**
349
- * Schema-first route registration
350
- */
351
- route(schema: RouteSchema): void {
352
- this.registerRoute(schema);
353
- }
354
-
355
- /**
356
- * Direct API (for backward compatibility)
357
- */
358
- addRoute(
359
- method: HttpMethod,
360
- path: string,
361
- handler: RouteHandler,
362
- middleware: Middleware[] = []
363
- ): void {
364
- this.registerRoute({
365
- method,
366
- path,
367
- handler,
368
- middleware,
369
- });
370
- }
371
-
372
- // ===== Route Matching =====
373
-
374
- /**
375
- * Find a matching route for the request
376
- * Returns boolean (sync) for fast-path routes, Promise<boolean> for others
377
- */
378
- handleRequest(req: HttpRequest, res: HttpResponse): Promise<boolean> | boolean {
379
- // PERFORMANCE: Only increment stats counter, not individual metrics in hot path
380
- this.stats.requestCount++;
381
-
382
- const method = req.method?.toUpperCase() as HttpMethod;
383
- const path = req.path;
384
-
385
- // Phase 1: No middleware, auth, validation, or rate limiting
386
- // Optimized for synchronous execution when possible
387
- if (this.fastPathRoutes.size > 0) {
388
- for (const route of this.fastPathRoutes) {
389
- if (route.schema.method === method) {
390
- // Inline parameter extraction for speed (avoid function call overhead)
391
- if (route.compiledPath.isStatic) {
392
- if (route.compiledPath.path === path) {
393
- // Static route match
394
- req.params = {};
395
-
396
- try {
397
- const result = route.schema.handler(req, res);
398
-
399
- // Check if result is a promise (optimized check)
400
- if (result && typeof (result as any).then === 'function') {
401
- // Async handler - return promise
402
- return (result as Promise<any>)
403
- .then(actualResult => {
404
- if (actualResult !== undefined && !res.headersSent) {
405
- res.json(actualResult);
406
- }
407
- return true;
408
- })
409
- .catch(() => {
410
- if (!res.headersSent) {
411
- res.status(500).json({ error: 'Internal server error' });
412
- }
413
- return true;
414
- });
415
- } else {
416
- // Sync handler - handle synchronously (fastest path!)
417
- if (result !== undefined && !res.headersSent) {
418
- res.json(result);
419
- }
420
- return true;
421
- }
422
- } catch (error) {
423
- if (!res.headersSent) {
424
- res.status(500).json({ error: 'Internal server error' });
425
- }
426
- return true;
427
- }
428
- }
429
- } else {
430
- // Dynamic route - use regex matching
431
- const pattern = route.compiledPath.pattern;
432
- if (pattern) {
433
- const matches = path.match(pattern);
434
- if (matches) {
435
- // Extract params inline (avoid function call)
436
- const params: Record<string, string> = {};
437
- const paramNames = route.compiledPath.paramNames;
438
- for (let i = 0; i < paramNames.length; i++) {
439
- params[paramNames[i]] = matches[i + 1];
440
- }
441
- req.params = params;
442
-
443
- try {
444
- const result = route.schema.handler(req, res);
445
-
446
- if (result && typeof (result as any).then === 'function') {
447
- return (result as Promise<any>)
448
- .then(actualResult => {
449
- if (actualResult !== undefined && !res.headersSent) {
450
- res.json(actualResult);
451
- }
452
- return true;
453
- })
454
- .catch(() => {
455
- if (!res.headersSent) {
456
- res.status(500).json({ error: 'Internal server error' });
457
- }
458
- return true;
459
- });
460
- } else {
461
- if (result !== undefined && !res.headersSent) {
462
- res.json(result);
463
- }
464
- return true;
465
- }
466
- } catch (error) {
467
- if (!res.headersSent) {
468
- res.status(500).json({ error: 'Internal server error' });
469
- }
470
- return true;
471
- }
472
- }
473
- }
474
- }
475
- }
476
- }
477
- }
478
-
479
- // Phase 2 & 3: Non-fast-path routes (async)
480
- return (async () => {
481
- // Phase 2: O(1) static route lookup
482
- const staticKey = `${method}:${path}`;
483
-
484
- // Check pool manager cache
485
- const cachedRoute = this.poolManager.getCachedRoute(staticKey);
486
- if (cachedRoute) {
487
- await this.executeRoute(cachedRoute, req, res, { params: {} });
488
- return true;
489
- }
490
-
491
- const staticRoute = this.staticRoutes.get(staticKey);
492
- if (staticRoute) {
493
- this.poolManager.cacheRoute(staticKey, staticRoute);
494
- req.params = {};
495
- await this.executeRoute(staticRoute, req, res, { params: {} });
496
- return true;
497
- }
498
-
499
- // Phase 3: Segment-based dynamic route matching
500
- const segments = path.split('/').filter(s => s.length > 0);
501
- const segmentCount = segments.length;
502
- const candidates = this.dynamicRoutesBySegments.get(segmentCount) || [];
503
-
504
- for (const route of candidates) {
505
- if (route.schema.method === method) {
506
- const matchResult = PathMatcher.match(route.compiledPath, path);
507
- if (matchResult) {
508
- this.poolManager.cacheRoute(staticKey, route);
509
- await this.executeRoute(route, req, res, matchResult);
510
- return true;
511
- }
512
- }
513
- }
514
-
515
- // No route found
516
- return false;
517
- })();
518
- }
519
-
520
- // ===== Route Execution =====
521
-
522
- private async executeRoute(
523
- route: InternalRoute,
524
- req: HttpRequest,
525
- res: HttpResponse,
526
- matchResult: { params: Record<string, string> }
527
- ): Promise<void> {
528
- // Set params from pool
529
- req.params = this.poolManager.acquireParams();
530
- Object.assign(req.params, matchResult.params);
531
-
532
- try {
533
- // Execute middleware phases in order
534
- for (const phase of route.executionOrder) {
535
- if (res.headersSent) break;
536
- await this.executePhase(phase, route, req, res);
537
- }
538
-
539
- // Execute handler
540
- if (!res.headersSent) {
541
- const result = await route.schema.handler(req, res);
542
- if (result !== undefined && !res.headersSent) {
543
- await res.json(result);
544
- }
545
- }
546
- } catch (error) {
547
- logger.error('Route execution error', 'Execution', {
548
- error: error instanceof Error ? error.message : String(error),
549
- route: `${route.schema.method} ${route.schema.path}`,
550
- });
551
-
552
- if (!res.headersSent) {
553
- res.status(500).json({
554
- success: false,
555
- error: 'Internal server error',
556
- requestId: req.requestId,
557
- });
558
- }
559
- } finally {
560
- // Release params back to pool
561
- if (req.params) {
562
- this.poolManager.releaseParams(req.params);
563
- }
564
- }
565
- }
566
-
567
- private async executePhase(
568
- phase: string,
569
- route: InternalRoute,
570
- req: HttpRequest,
571
- res: HttpResponse
572
- ): Promise<void> {
573
- const schema = route.schema;
574
- const middleware = schema.middleware;
575
-
576
- switch (phase) {
577
- case 'before':
578
- if (middleware && 'before' in middleware && Array.isArray(middleware.before)) {
579
- for (const mw of middleware.before) {
580
- await this.executeMiddleware(mw, req, res);
581
- if (res.headersSent) return;
582
- }
583
- }
584
- break;
585
-
586
- case 'rateLimit':
587
- if (schema.rateLimit) {
588
- await this.executeRateLimit(req, res, schema.rateLimit);
589
- }
590
- break;
591
-
592
- case 'auth':
593
- if (schema.auth) {
594
- await this.executeAuth(req, res, schema.auth);
595
- }
596
- break;
597
-
598
- case 'validation':
599
- if (schema.validation) {
600
- await this.executeValidation(req, res, schema.validation);
601
- }
602
- break;
603
-
604
- case 'transform':
605
- if (middleware && 'transform' in middleware && Array.isArray(middleware.transform)) {
606
- for (const mw of middleware.transform) {
607
- await this.executeMiddleware(mw, req, res);
608
- if (res.headersSent) return;
609
- }
610
- }
611
- break;
612
-
613
- case 'cache':
614
- if (schema.cache) {
615
- await this.executeCache(req, res, schema.cache);
616
- }
617
- break;
618
-
619
- case 'after':
620
- if (middleware && 'after' in middleware && Array.isArray(middleware.after)) {
621
- for (const mw of middleware.after) {
622
- await this.executeMiddleware(mw, req, res);
623
- if (res.headersSent) return;
624
- }
625
- }
626
- break;
627
-
628
- case 'middleware':
629
- // Handle array-style middleware (backward compatibility)
630
- if (middleware && Array.isArray(middleware)) {
631
- for (const mw of middleware) {
632
- await this.executeMiddleware(mw, req, res);
633
- if (res.headersSent) return;
634
- }
635
- }
636
- break;
637
- }
638
- }
639
-
640
- private async executeMiddleware(
641
- middleware: Middleware,
642
- req: HttpRequest,
643
- res: HttpResponse
644
- ): Promise<void> {
645
- return new Promise((resolve, reject) => {
646
- let resolved = false;
647
-
648
- const next = () => {
649
- if (!resolved) {
650
- resolved = true;
651
- resolve();
652
- }
653
- };
654
-
655
- try {
656
- const result = middleware(req, res, next);
657
- if (result instanceof Promise) {
658
- result.then(() => !resolved && next()).catch(reject);
659
- } else if (!resolved) {
660
- next();
661
- }
662
- } catch (error) {
663
- if (!resolved) {
664
- resolved = true;
665
- reject(error);
666
- }
667
- }
668
- });
669
- }
670
-
671
- private async executeRateLimit(
672
- _req: HttpRequest,
673
- _res: HttpResponse,
674
- _config: RateLimitConfig
675
- ): Promise<void> {
676
- // Rate limiting implementation placeholder
677
- // TODO: Implement actual rate limiting logic
678
- }
679
-
680
- private async executeAuth(
681
- req: HttpRequest,
682
- res: HttpResponse,
683
- config: AuthConfig
684
- ): Promise<void> {
685
- const auth = (req as any).auth;
686
-
687
- if (!auth) {
688
- res.status(500).json({
689
- success: false,
690
- error: 'Authentication middleware not configured',
691
- });
692
- return;
693
- }
694
-
695
- if (!config.optional && !auth.isAuthenticated) {
696
- res.status(401).json({
697
- success: false,
698
- error: 'Authentication required',
699
- });
700
- return;
701
- }
702
-
703
- if (auth.isAuthenticated && config.roles) {
704
- const userRoles = auth.user?.roles || [];
705
- const hasRole = config.roles.some(role => userRoles.includes(role));
706
- if (!hasRole) {
707
- res.status(403).json({
708
- success: false,
709
- error: 'Insufficient permissions',
710
- message: `Required roles: ${config.roles.join(', ')}`,
711
- });
712
- return;
713
- }
714
- }
715
-
716
- if (auth.isAuthenticated && config.permissions) {
717
- const userPermissions = auth.user?.permissions || [];
718
- const hasPermission = config.permissions.every(permission =>
719
- userPermissions.includes(permission)
720
- );
721
- if (!hasPermission) {
722
- res.status(403).json({
723
- success: false,
724
- error: 'Insufficient permissions',
725
- message: `Required permissions: ${config.permissions.join(', ')}`,
726
- });
727
- return;
728
- }
729
- }
730
- }
731
-
732
- private async executeValidation(
733
- req: HttpRequest,
734
- res: HttpResponse,
735
- config: ValidationConfig
736
- ): Promise<void> {
737
- try {
738
- if (config.body && req.body !== undefined) {
739
- (req as any).validatedBody = await config.body.parseAsync(req.body);
740
- req.body = (req as any).validatedBody;
741
- }
742
-
743
- if (config.query && req.query !== undefined) {
744
- (req as any).validatedQuery = await config.query.parseAsync(req.query);
745
- req.query = (req as any).validatedQuery;
746
- }
747
-
748
- if (config.params && req.params !== undefined) {
749
- (req as any).validatedParams = await config.params.parseAsync(req.params);
750
- req.params = (req as any).validatedParams;
751
- }
752
-
753
- if (config.headers && req.headers !== undefined) {
754
- (req as any).validatedHeaders = await config.headers.parseAsync(req.headers);
755
- }
756
- } catch (error: any) {
757
- const field = error.field || 'unknown';
758
- if (error.issues) {
759
- res.status(400).json({
760
- success: false,
761
- error: `Validation failed for ${field}`,
762
- details: error.issues.map((issue: any) => ({
763
- field: issue.path.length > 0 ? issue.path.join('.') : field,
764
- message: issue.message,
765
- code: issue.code,
766
- })),
767
- requestId: req.requestId,
768
- });
769
- } else {
770
- res.status(400).json({
771
- success: false,
772
- error: `Validation failed for ${field}`,
773
- requestId: req.requestId,
774
- });
775
- }
776
- }
777
- }
778
-
779
- private async executeCache(
780
- _req: HttpRequest,
781
- _res: HttpResponse,
782
- _config: CacheConfig
783
- ): Promise<void> {
784
- // Cache implementation placeholder
785
- // TODO: Implement actual caching logic
786
- }
787
-
788
- // ===== Helper Methods =====
789
-
790
- private isFastPathRoute(schema: RouteSchema): boolean {
791
- const middleware = schema.middleware;
792
- const hasMiddleware =
793
- (middleware && Array.isArray(middleware) && middleware.length > 0) ||
794
- (middleware &&
795
- typeof middleware === 'object' &&
796
- ((middleware as MiddlewarePhases).before?.length ||
797
- (middleware as MiddlewarePhases).after?.length ||
798
- (middleware as MiddlewarePhases).transform?.length));
799
-
800
- return (
801
- !schema.auth && !schema.validation && !schema.rateLimit && !schema.cache && !hasMiddleware
802
- );
803
- }
804
-
805
- private buildExecutionOrder(schema: RouteSchema): string[] {
806
- const order: string[] = [];
807
- const middleware = schema.middleware;
808
-
809
- // Phase-based middleware
810
- if (middleware && 'before' in middleware && middleware.before?.length) {
811
- order.push('before');
812
- }
813
-
814
- if (schema.rateLimit) order.push('rateLimit');
815
- if (schema.auth) order.push('auth');
816
- if (schema.validation) order.push('validation');
817
-
818
- if (middleware && 'transform' in middleware && middleware.transform?.length) {
819
- order.push('transform');
820
- }
821
-
822
- if (schema.cache) order.push('cache');
823
-
824
- if (middleware && 'after' in middleware && middleware.after?.length) {
825
- order.push('after');
826
- }
827
-
828
- // Array-style middleware (backward compatibility)
829
- if (middleware && Array.isArray(middleware) && middleware.length > 0) {
830
- order.push('middleware');
831
- }
832
-
833
- return order;
834
- }
835
-
836
- // ===== Inspection Methods =====
837
-
838
- getAllRoutes(): RouteSchema[] {
839
- return this.allRoutes.map(r => r.schema);
840
- }
841
-
842
- getRouteCount(): number {
843
- return this.stats.totalRoutes;
844
- }
845
-
846
- getStats() {
847
- return {
848
- ...this.stats,
849
- poolManager: this.poolManager.getPerformanceSummary(),
850
- pathMatcher: PathMatcher.getStats(),
851
- };
852
- }
853
-
854
- logPerformanceStats(): void {
855
- const stats = this.getStats();
856
- logger.info('UnifiedRouter Performance', 'Stats', {
857
- totalRoutes: stats.totalRoutes,
858
- staticRoutes: stats.staticRoutes,
859
- dynamicRoutes: stats.dynamicRoutes,
860
- fastPathRoutes: stats.fastPathRoutes,
861
- requests: stats.requestCount,
862
- poolManager: {
863
- routeCacheHitRate: stats.poolManager.routeCacheHitRate.toFixed(1) + '%',
864
- responseCacheHitRate: stats.poolManager.responseCacheHitRate.toFixed(1) + '%',
865
- paramPoolUtilization: stats.poolManager.paramPoolUtilization.toFixed(1) + '%',
866
- totalMemoryKB: stats.poolManager.totalMemoryKB.toFixed(1) + ' KB',
867
- },
868
- });
869
- }
870
- }