@morojs/moro 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) 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 +190 -176
  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/adapters/cache/file.d.ts +1 -1
  97. package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
  98. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  99. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  100. package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
  101. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  102. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  103. package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
  104. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  105. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
  106. package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
  107. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  108. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  109. package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
  110. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  111. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  112. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
  113. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  114. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
  115. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
  116. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  117. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  118. package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
  119. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
  120. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  121. package/dist/core/middleware/built-in/adapters/index.js +4 -23
  122. package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
  123. package/dist/core/middleware/built-in/auth-helpers.js +11 -22
  124. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
  125. package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
  126. package/dist/core/middleware/built-in/auth-providers.js +4 -9
  127. package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth.d.ts +2 -2
  129. package/dist/core/middleware/built-in/auth.js +93 -26
  130. package/dist/core/middleware/built-in/auth.js.map +1 -1
  131. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  132. package/dist/core/middleware/built-in/cache.js +11 -12
  133. package/dist/core/middleware/built-in/cache.js.map +1 -1
  134. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  135. package/dist/core/middleware/built-in/cdn.js +5 -9
  136. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  137. package/dist/core/middleware/built-in/cookie.d.ts +1 -1
  138. package/dist/core/middleware/built-in/cookie.js +3 -7
  139. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  140. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  141. package/dist/core/middleware/built-in/cors.js +3 -7
  142. package/dist/core/middleware/built-in/cors.js.map +1 -1
  143. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  144. package/dist/core/middleware/built-in/csp.js +5 -8
  145. package/dist/core/middleware/built-in/csp.js.map +1 -1
  146. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  147. package/dist/core/middleware/built-in/csrf.js +5 -8
  148. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  149. package/dist/core/middleware/built-in/error-tracker.js +3 -7
  150. package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
  151. package/dist/core/middleware/built-in/index.d.ts +28 -27
  152. package/dist/core/middleware/built-in/index.js +48 -78
  153. package/dist/core/middleware/built-in/index.js.map +1 -1
  154. package/dist/core/middleware/built-in/jwt-helpers.d.ts +118 -0
  155. package/dist/core/middleware/built-in/jwt-helpers.js +218 -0
  156. package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -0
  157. package/dist/core/middleware/built-in/performance-monitor.js +3 -7
  158. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
  159. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  160. package/dist/core/middleware/built-in/rate-limit.js +3 -7
  161. package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
  162. package/dist/core/middleware/built-in/request-logger.js +5 -8
  163. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  164. package/dist/core/middleware/built-in/session.d.ts +2 -2
  165. package/dist/core/middleware/built-in/session.js +11 -15
  166. package/dist/core/middleware/built-in/session.js.map +1 -1
  167. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  168. package/dist/core/middleware/built-in/sse.js +12 -14
  169. package/dist/core/middleware/built-in/sse.js.map +1 -1
  170. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  171. package/dist/core/middleware/built-in/validation.js +3 -7
  172. package/dist/core/middleware/built-in/validation.js.map +1 -1
  173. package/dist/core/middleware/index.d.ts +4 -4
  174. package/dist/core/middleware/index.js +8 -28
  175. package/dist/core/middleware/index.js.map +1 -1
  176. package/dist/core/modules/auto-discovery.d.ts +19 -2
  177. package/dist/core/modules/auto-discovery.js +391 -74
  178. package/dist/core/modules/auto-discovery.js.map +1 -1
  179. package/dist/core/modules/index.d.ts +2 -2
  180. package/dist/core/modules/index.js +2 -9
  181. package/dist/core/modules/index.js.map +1 -1
  182. package/dist/core/modules/modules.d.ts +3 -3
  183. package/dist/core/modules/modules.js +23 -54
  184. package/dist/core/modules/modules.js.map +1 -1
  185. package/dist/core/networking/adapters/index.d.ts +4 -3
  186. package/dist/core/networking/adapters/index.js +3 -7
  187. package/dist/core/networking/adapters/index.js.map +1 -1
  188. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  189. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  190. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  191. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  192. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  193. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  194. package/dist/core/networking/adapters/ws-adapter.d.ts +2 -2
  195. package/dist/core/networking/adapters/ws-adapter.js +8 -43
  196. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  197. package/dist/core/networking/index.d.ts +3 -2
  198. package/dist/core/networking/index.js +2 -7
  199. package/dist/core/networking/index.js.map +1 -1
  200. package/dist/core/networking/service-discovery.js +8 -12
  201. package/dist/core/networking/service-discovery.js.map +1 -1
  202. package/dist/core/networking/websocket-adapter.js +1 -2
  203. package/dist/core/networking/websocket-adapter.js.map +1 -1
  204. package/dist/core/networking/websocket-manager.d.ts +3 -3
  205. package/dist/core/networking/websocket-manager.js +9 -11
  206. package/dist/core/networking/websocket-manager.js.map +1 -1
  207. package/dist/core/pooling/object-pool-manager.d.ts +140 -0
  208. package/dist/core/pooling/object-pool-manager.js +502 -0
  209. package/dist/core/pooling/object-pool-manager.js.map +1 -0
  210. package/dist/core/routing/app-integration.d.ts +14 -12
  211. package/dist/core/routing/app-integration.js +49 -85
  212. package/dist/core/routing/app-integration.js.map +1 -1
  213. package/dist/core/routing/index.d.ts +17 -11
  214. package/dist/core/routing/index.js +48 -237
  215. package/dist/core/routing/index.js.map +1 -1
  216. package/dist/core/routing/path-matcher.d.ts +67 -0
  217. package/dist/core/routing/path-matcher.js +182 -0
  218. package/dist/core/routing/path-matcher.js.map +1 -0
  219. package/dist/core/routing/router.d.ts +38 -0
  220. package/dist/core/routing/router.js +68 -0
  221. package/dist/core/routing/router.js.map +1 -0
  222. package/dist/core/routing/unified-router.d.ts +148 -0
  223. package/dist/core/routing/unified-router.js +684 -0
  224. package/dist/core/routing/unified-router.js.map +1 -0
  225. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  226. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  227. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  228. package/dist/core/runtime/base-adapter.d.ts +2 -2
  229. package/dist/core/runtime/base-adapter.js +3 -7
  230. package/dist/core/runtime/base-adapter.js.map +1 -1
  231. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  232. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  233. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  234. package/dist/core/runtime/index.d.ts +12 -12
  235. package/dist/core/runtime/index.js +22 -35
  236. package/dist/core/runtime/index.js.map +1 -1
  237. package/dist/core/runtime/node-adapter.d.ts +4 -4
  238. package/dist/core/runtime/node-adapter.js +18 -49
  239. package/dist/core/runtime/node-adapter.js.map +1 -1
  240. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  241. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  242. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  243. package/dist/core/utilities/circuit-breaker.js +1 -5
  244. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  245. package/dist/core/utilities/container.js +12 -22
  246. package/dist/core/utilities/container.js.map +1 -1
  247. package/dist/core/utilities/hooks.d.ts +2 -2
  248. package/dist/core/utilities/hooks.js +7 -12
  249. package/dist/core/utilities/hooks.js.map +1 -1
  250. package/dist/core/utilities/index.d.ts +5 -4
  251. package/dist/core/utilities/index.js +5 -19
  252. package/dist/core/utilities/index.js.map +1 -1
  253. package/dist/core/utilities/package-utils.d.ts +38 -0
  254. package/dist/core/utilities/package-utils.js +57 -0
  255. package/dist/core/utilities/package-utils.js.map +1 -0
  256. package/dist/core/validation/adapters.d.ts +1 -1
  257. package/dist/core/validation/adapters.js +15 -26
  258. package/dist/core/validation/adapters.js.map +1 -1
  259. package/dist/core/validation/index.d.ts +6 -4
  260. package/dist/core/validation/index.js +57 -28
  261. package/dist/core/validation/index.js.map +1 -1
  262. package/dist/core/validation/schema-interface.js +3 -9
  263. package/dist/core/validation/schema-interface.js.map +1 -1
  264. package/dist/index.d.ts +51 -52
  265. package/dist/index.js +23 -132
  266. package/dist/index.js.map +1 -1
  267. package/dist/moro.d.ts +70 -16
  268. package/dist/moro.js +658 -271
  269. package/dist/moro.js.map +1 -1
  270. package/dist/types/auth.js +3 -9
  271. package/dist/types/auth.js.map +1 -1
  272. package/dist/types/cache.js +1 -2
  273. package/dist/types/cdn.js +1 -2
  274. package/dist/types/config.d.ts +73 -2
  275. package/dist/types/config.js +1 -2
  276. package/dist/types/config.js.map +1 -1
  277. package/dist/types/core.d.ts +36 -42
  278. package/dist/types/core.js +1 -2
  279. package/dist/types/database.js +1 -2
  280. package/dist/types/discovery.js +1 -2
  281. package/dist/types/events.js +1 -2
  282. package/dist/types/hooks.d.ts +1 -1
  283. package/dist/types/hooks.js +1 -2
  284. package/dist/types/http.d.ts +16 -1
  285. package/dist/types/http.js +1 -2
  286. package/dist/types/logger.d.ts +7 -0
  287. package/dist/types/logger.js +1 -2
  288. package/dist/types/module.d.ts +11 -0
  289. package/dist/types/module.js +1 -2
  290. package/dist/types/runtime.d.ts +1 -1
  291. package/dist/types/runtime.js +1 -2
  292. package/dist/types/session.js +1 -2
  293. package/jest.config.mjs +41 -0
  294. package/package.json +19 -52
  295. package/src/core/auth/morojs-adapter.ts +18 -13
  296. package/src/core/config/config-manager.ts +133 -0
  297. package/src/core/config/config-sources.ts +600 -0
  298. package/src/core/config/config-validator.ts +1116 -0
  299. package/src/core/config/file-loader.ts +16 -273
  300. package/src/core/config/index.ts +83 -34
  301. package/src/core/config/schema.ts +47 -33
  302. package/src/core/config/utils.ts +24 -31
  303. package/src/core/database/README.md +26 -16
  304. package/src/core/database/adapters/drizzle.ts +18 -6
  305. package/src/core/database/adapters/index.ts +13 -13
  306. package/src/core/database/adapters/mongodb.ts +53 -5
  307. package/src/core/database/adapters/mysql.ts +32 -4
  308. package/src/core/database/adapters/postgresql.ts +30 -5
  309. package/src/core/database/adapters/redis.ts +61 -8
  310. package/src/core/database/adapters/sqlite.ts +19 -3
  311. package/src/core/database/index.ts +2 -2
  312. package/src/core/docs/index.ts +8 -8
  313. package/src/core/docs/openapi-generator.ts +4 -4
  314. package/src/core/docs/schema-to-openapi.ts +3 -6
  315. package/src/core/docs/simple-docs.ts +2 -2
  316. package/src/core/docs/swagger-ui.ts +19 -16
  317. package/src/core/docs/zod-to-openapi.ts +34 -34
  318. package/src/core/events/event-bus.ts +3 -3
  319. package/src/core/events/index.ts +2 -2
  320. package/src/core/framework.ts +320 -71
  321. package/src/core/http/http-server.ts +203 -143
  322. package/src/core/http/index.ts +4 -3
  323. package/src/core/http/uws-http-server.ts +591 -0
  324. package/src/core/logger/filters.ts +13 -5
  325. package/src/core/logger/index.ts +4 -3
  326. package/src/core/logger/logger.ts +435 -216
  327. package/src/core/logger/outputs.ts +1 -3
  328. package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
  329. package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
  330. package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
  331. package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
  332. package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
  333. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
  334. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
  335. package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
  336. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  337. package/src/core/middleware/built-in/auth-helpers.ts +1 -1
  338. package/src/core/middleware/built-in/auth-providers.ts +1 -1
  339. package/src/core/middleware/built-in/auth.ts +102 -21
  340. package/src/core/middleware/built-in/cache.ts +8 -6
  341. package/src/core/middleware/built-in/cdn.ts +4 -4
  342. package/src/core/middleware/built-in/cookie.ts +2 -2
  343. package/src/core/middleware/built-in/cors.ts +2 -2
  344. package/src/core/middleware/built-in/csp.ts +3 -3
  345. package/src/core/middleware/built-in/csrf.ts +3 -3
  346. package/src/core/middleware/built-in/error-tracker.ts +1 -1
  347. package/src/core/middleware/built-in/index.ts +38 -30
  348. package/src/core/middleware/built-in/jwt-helpers.ts +243 -0
  349. package/src/core/middleware/built-in/performance-monitor.ts +1 -1
  350. package/src/core/middleware/built-in/rate-limit.ts +2 -2
  351. package/src/core/middleware/built-in/request-logger.ts +3 -1
  352. package/src/core/middleware/built-in/session.ts +7 -8
  353. package/src/core/middleware/built-in/sse.ts +11 -9
  354. package/src/core/middleware/built-in/validation.ts +2 -2
  355. package/src/core/middleware/index.ts +6 -6
  356. package/src/core/modules/auto-discovery.ts +478 -15
  357. package/src/core/modules/index.ts +2 -2
  358. package/src/core/modules/modules.ts +23 -12
  359. package/src/core/networking/adapters/index.ts +4 -3
  360. package/src/core/networking/adapters/socketio-adapter.ts +5 -3
  361. package/src/core/networking/adapters/uws-adapter.ts +619 -0
  362. package/src/core/networking/adapters/ws-adapter.ts +8 -9
  363. package/src/core/networking/index.ts +3 -2
  364. package/src/core/networking/service-discovery.ts +6 -7
  365. package/src/core/networking/websocket-manager.ts +7 -7
  366. package/src/core/pooling/object-pool-manager.ts +630 -0
  367. package/src/core/routing/app-integration.ts +60 -112
  368. package/src/core/routing/index.ts +66 -293
  369. package/src/core/routing/path-matcher.ts +222 -0
  370. package/src/core/routing/router.ts +97 -0
  371. package/src/core/routing/unified-router.ts +870 -0
  372. package/src/core/runtime/aws-lambda-adapter.ts +3 -3
  373. package/src/core/runtime/base-adapter.ts +2 -2
  374. package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
  375. package/src/core/runtime/index.ts +13 -13
  376. package/src/core/runtime/node-adapter.ts +16 -10
  377. package/src/core/runtime/vercel-edge-adapter.ts +3 -3
  378. package/src/core/utilities/hooks.ts +3 -3
  379. package/src/core/utilities/index.ts +5 -4
  380. package/src/core/utilities/package-utils.ts +59 -0
  381. package/src/core/validation/adapters.ts +1 -1
  382. package/src/core/validation/index.ts +68 -16
  383. package/src/index.ts +73 -66
  384. package/src/moro.ts +784 -253
  385. package/src/types/config.ts +74 -2
  386. package/src/types/core.ts +49 -47
  387. package/src/types/hooks.ts +1 -1
  388. package/src/types/http.ts +23 -1
  389. package/src/types/logger.ts +9 -0
  390. package/src/types/module.ts +12 -0
  391. package/src/types/runtime.ts +1 -1
  392. package/tsconfig.json +4 -2
  393. package/dist/core/config/loader.d.ts +0 -7
  394. package/dist/core/config/loader.js +0 -269
  395. package/dist/core/config/loader.js.map +0 -1
  396. package/dist/core/config/validation.d.ts +0 -17
  397. package/dist/core/config/validation.js +0 -131
  398. package/dist/core/config/validation.js.map +0 -1
  399. package/dist/core/http/router.d.ts +0 -14
  400. package/dist/core/http/router.js +0 -109
  401. package/dist/core/http/router.js.map +0 -1
  402. package/src/core/config/loader.ts +0 -633
  403. package/src/core/config/validation.ts +0 -140
  404. package/src/core/http/router.ts +0 -141
@@ -0,0 +1,243 @@
1
+ /**
2
+ * JWT Error Handling Utilities for Custom Middleware
3
+ *
4
+ * This module provides utilities to help users handle JWT errors gracefully
5
+ * in their custom authentication middleware.
6
+ */
7
+
8
+ import { resolveUserPackage } from '../../utilities/package-utils.js';
9
+
10
+ export interface JWTVerificationResult {
11
+ success: boolean;
12
+ payload?: any;
13
+ error?: {
14
+ type: 'expired' | 'invalid' | 'malformed' | 'missing_secret' | 'unknown';
15
+ message: string;
16
+ expiredAt?: Date;
17
+ date?: Date;
18
+ };
19
+ }
20
+
21
+ /**
22
+ * Safely verify a JWT token with proper error handling
23
+ *
24
+ * @param token - The JWT token to verify
25
+ * @param secret - The secret key for verification
26
+ * @param options - Additional JWT verification options
27
+ * @returns JWTVerificationResult with success status and payload or error details
28
+ */
29
+ export async function safeVerifyJWT(
30
+ token: string,
31
+ secret: string,
32
+ options: any = {}
33
+ ): Promise<JWTVerificationResult> {
34
+ // Check if jsonwebtoken is available
35
+ let jwt: any;
36
+ try {
37
+ const jwtPath = resolveUserPackage('jsonwebtoken');
38
+ jwt = await import(jwtPath);
39
+ } catch (error) {
40
+ return {
41
+ success: false,
42
+ error: {
43
+ type: 'missing_secret',
44
+ message:
45
+ 'JWT verification requires the "jsonwebtoken" package. ' +
46
+ 'Please install it with: npm install jsonwebtoken @types/jsonwebtoken',
47
+ },
48
+ };
49
+ }
50
+
51
+ if (!secret) {
52
+ return {
53
+ success: false,
54
+ error: {
55
+ type: 'missing_secret',
56
+ message:
57
+ 'JWT verification requires a secret. ' +
58
+ 'Please provide a secret for token verification.',
59
+ },
60
+ };
61
+ }
62
+
63
+ try {
64
+ const payload = jwt.verify(token, secret, options);
65
+ return {
66
+ success: true,
67
+ payload,
68
+ };
69
+ } catch (error: any) {
70
+ // Handle specific JWT errors gracefully
71
+ if (error.name === 'TokenExpiredError') {
72
+ return {
73
+ success: false,
74
+ error: {
75
+ type: 'expired',
76
+ message: 'JWT token has expired',
77
+ expiredAt: error.expiredAt,
78
+ },
79
+ };
80
+ } else if (error.name === 'JsonWebTokenError') {
81
+ return {
82
+ success: false,
83
+ error: {
84
+ type: 'invalid',
85
+ message: 'Invalid JWT token format or signature',
86
+ },
87
+ };
88
+ } else if (error.name === 'NotBeforeError') {
89
+ return {
90
+ success: false,
91
+ error: {
92
+ type: 'malformed',
93
+ message: 'JWT token is not active yet',
94
+ date: error.date,
95
+ },
96
+ };
97
+ } else {
98
+ return {
99
+ success: false,
100
+ error: {
101
+ type: 'unknown',
102
+ message: `JWT verification failed: ${error.message}`,
103
+ },
104
+ };
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Extract JWT token from Authorization header
111
+ *
112
+ * @param authHeader - The Authorization header value
113
+ * @returns The JWT token or null if not found/invalid format
114
+ */
115
+ export function extractJWTFromHeader(authHeader: string | undefined): string | null {
116
+ if (!authHeader) {
117
+ return null;
118
+ }
119
+
120
+ if (!authHeader.startsWith('Bearer ')) {
121
+ return null;
122
+ }
123
+
124
+ const token = authHeader.substring(7);
125
+ return token.trim() || null;
126
+ }
127
+
128
+ /**
129
+ * Create a standardized auth middleware error response
130
+ *
131
+ * @param error - The JWT verification error
132
+ * @returns Standardized error response object
133
+ */
134
+ export function createAuthErrorResponse(error: JWTVerificationResult['error']) {
135
+ if (!error) {
136
+ return {
137
+ success: false,
138
+ error: 'Authentication failed',
139
+ message: 'Unknown authentication error',
140
+ };
141
+ }
142
+
143
+ switch (error.type) {
144
+ case 'expired':
145
+ return {
146
+ success: false,
147
+ error: 'Token expired',
148
+ message: 'Your session has expired. Please sign in again.',
149
+ expiredAt: error.expiredAt,
150
+ };
151
+
152
+ case 'invalid':
153
+ return {
154
+ success: false,
155
+ error: 'Invalid token',
156
+ message: 'The provided authentication token is invalid.',
157
+ };
158
+
159
+ case 'malformed':
160
+ return {
161
+ success: false,
162
+ error: 'Token not ready',
163
+ message: 'The authentication token is not yet valid.',
164
+ availableAt: error.date,
165
+ };
166
+
167
+ case 'missing_secret':
168
+ return {
169
+ success: false,
170
+ error: 'Configuration error',
171
+ message: 'Authentication service is not properly configured.',
172
+ };
173
+
174
+ default:
175
+ return {
176
+ success: false,
177
+ error: 'Authentication failed',
178
+ message: error.message || 'Authentication verification failed.',
179
+ };
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Example usage for custom middleware with elegant error handling:
185
+ *
186
+ * ```typescript
187
+ * import { safeVerifyJWT, extractJWTFromHeader, createAuthErrorResponse } from '@morojs/moro';
188
+ *
189
+ * const authMiddleware = async (req: any, res: any, next: any) => {
190
+ * const token = extractJWTFromHeader(req.headers.authorization);
191
+ *
192
+ * if (!token) {
193
+ * return res.status(401).json({
194
+ * success: false,
195
+ * error: 'Missing token',
196
+ * message: 'Authorization header with Bearer token is required'
197
+ * });
198
+ * }
199
+ *
200
+ * const result = safeVerifyJWT(token, process.env.JWT_SECRET!);
201
+ *
202
+ * if (!result.success) {
203
+ * // This provides elegant, user-friendly error messages instead of stack traces
204
+ * const errorResponse = createAuthErrorResponse(result.error);
205
+ * return res.status(401).json(errorResponse);
206
+ * }
207
+ *
208
+ * // Token is valid - attach user info to request
209
+ * req.user = result.payload;
210
+ * req.auth = {
211
+ * user: result.payload,
212
+ * isAuthenticated: true,
213
+ * token
214
+ * };
215
+ *
216
+ * next();
217
+ * };
218
+ * ```
219
+ *
220
+ * Benefits of using safeVerifyJWT vs raw jsonwebtoken.verify():
221
+ *
222
+ * ❌ Raw approach (shows ugly error messages to users):
223
+ * ```typescript
224
+ * try {
225
+ * const decoded = jwt.verify(token, secret);
226
+ * req.user = decoded;
227
+ * } catch (error) {
228
+ * // This exposes technical details and stack traces to users:
229
+ * // "Invalid token: TokenExpiredError: jwt expired at /node_modules/jsonwebtoken/verify.js:190:21..."
230
+ * throw error; // BAD - exposes internal details
231
+ * }
232
+ * ```
233
+ *
234
+ * ✅ Safe approach (shows clean, user-friendly messages):
235
+ * ```typescript
236
+ * const result = safeVerifyJWT(token, secret);
237
+ * if (!result.success) {
238
+ * // This returns clean messages like:
239
+ * // { "error": "Token expired", "message": "Your session has expired. Please sign in again." }
240
+ * return res.status(401).json(createAuthErrorResponse(result.error));
241
+ * }
242
+ * ```
243
+ */
@@ -1,5 +1,5 @@
1
1
  // Performance monitoring middleware
2
- import { createFrameworkLogger } from '../../logger';
2
+ import { createFrameworkLogger } from '../../logger/index.js';
3
3
 
4
4
  const logger = createFrameworkLogger('PerformanceMonitor');
5
5
 
@@ -1,6 +1,6 @@
1
1
  // Rate Limiting Middleware
2
- import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
- import { createFrameworkLogger } from '../../logger';
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks.js';
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
4
 
5
5
  const logger = createFrameworkLogger('RateLimitMiddleware');
6
6
 
@@ -1,5 +1,7 @@
1
1
  // Simple request logging middleware
2
- import { logger } from '../../logger';
2
+ import { createFrameworkLogger } from '../../logger/index.js';
3
+
4
+ const logger = createFrameworkLogger('RequestLogger');
3
5
 
4
6
  export const requestLogger = async (context: any): Promise<void> => {
5
7
  const startTime = Date.now();
@@ -1,10 +1,11 @@
1
1
  // Session Middleware
2
- import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
- import { createFrameworkLogger } from '../../logger';
4
- import { CacheAdapter } from '../../../types/cache';
5
- import { MemoryCacheAdapter } from './adapters/cache/memory';
6
- import { RedisCacheAdapter } from './adapters/cache/redis';
7
- import { FileCacheAdapter } from './adapters/cache/file';
2
+ import crypto from 'crypto';
3
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks.js';
4
+ import { createFrameworkLogger } from '../../logger/index.js';
5
+ import { CacheAdapter } from '../../../types/cache.js';
6
+ import { MemoryCacheAdapter } from './adapters/cache/memory.js';
7
+ import { RedisCacheAdapter } from './adapters/cache/redis.js';
8
+ import { FileCacheAdapter } from './adapters/cache/file.js';
8
9
 
9
10
  const logger = createFrameworkLogger('SessionMiddleware');
10
11
 
@@ -157,7 +158,6 @@ class Session {
157
158
  return this.options.genid();
158
159
  }
159
160
 
160
- const crypto = require('crypto');
161
161
  return crypto.randomBytes(24).toString('hex');
162
162
  }
163
163
 
@@ -229,7 +229,6 @@ export const session = (options: SessionOptions = {}): MiddlewareInterface => ({
229
229
  if (config.genid) {
230
230
  return config.genid();
231
231
  }
232
- const crypto = require('crypto');
233
232
  return crypto.randomBytes(24).toString('hex');
234
233
  };
235
234
 
@@ -1,6 +1,6 @@
1
1
  // Server-Sent Events Middleware
2
- import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
- import { createFrameworkLogger } from '../../logger';
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks.js';
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
4
 
5
5
  const logger = createFrameworkLogger('SSEMiddleware');
6
6
 
@@ -35,13 +35,15 @@ export const sse = (
35
35
  logger.debug('Setting up SSE connection', 'SSESetup');
36
36
 
37
37
  // Set SSE headers
38
- res.writeHead(200, {
39
- 'Content-Type': 'text/event-stream',
40
- 'Cache-Control': 'no-cache',
41
- Connection: 'keep-alive',
42
- 'Access-Control-Allow-Origin': options.cors ? '*' : undefined,
43
- 'Access-Control-Allow-Headers': options.cors ? 'Cache-Control' : undefined,
44
- });
38
+ if (!res.headersSent) {
39
+ res.writeHead(200, {
40
+ 'Content-Type': 'text/event-stream',
41
+ 'Cache-Control': 'no-cache',
42
+ Connection: 'keep-alive',
43
+ 'Access-Control-Allow-Origin': options.cors ? '*' : undefined,
44
+ 'Access-Control-Allow-Headers': options.cors ? 'Cache-Control' : undefined,
45
+ });
46
+ }
45
47
 
46
48
  // Add SSE methods to response
47
49
  res.sendEvent = (data: any, event?: string, id?: string) => {
@@ -1,6 +1,6 @@
1
1
  // Validation Middleware
2
- import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
- import { createFrameworkLogger } from '../../logger';
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks.js';
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
4
 
5
5
  const logger = createFrameworkLogger('ValidationMiddleware');
6
6
 
@@ -1,17 +1,17 @@
1
1
  // Middleware System for Moro
2
2
  import { EventEmitter } from 'events';
3
- import { HookManager } from '../utilities';
3
+ import { HookManager } from '../utilities/index.js';
4
4
  import {
5
5
  MiddlewareMetadata,
6
6
  MiddlewareContext,
7
7
  MiddlewareInterface,
8
8
  SimpleMiddlewareFunction,
9
9
  MoroMiddleware,
10
- } from '../../types/hooks';
11
- import { createFrameworkLogger } from '../logger';
10
+ } from '../../types/hooks.js';
11
+ import { createFrameworkLogger } from '../logger/index.js';
12
12
 
13
13
  // Export types needed by built-in middleware
14
- export type { MiddlewareInterface, MoroMiddleware } from '../../types/hooks';
14
+ export type { MiddlewareInterface, MoroMiddleware } from '../../types/hooks.js';
15
15
 
16
16
  export class MiddlewareManager extends EventEmitter {
17
17
  private middleware = new Map<string, MiddlewareInterface>();
@@ -173,5 +173,5 @@ export class MiddlewareManager extends EventEmitter {
173
173
  }
174
174
 
175
175
  // Built-in middleware exports
176
- export { builtInMiddleware, simpleMiddleware } from './built-in';
177
- export * from './built-in';
176
+ export { builtInMiddleware, simpleMiddleware } from './built-in/index.js';
177
+ export * from './built-in/index.js';