@morojs/moro 1.7.30 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/README.md +89 -46
  2. package/dist/core/auth/morojs-adapter.js +95 -45
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.js.map +1 -1
  5. package/dist/core/config/config-sources.js +119 -48
  6. package/dist/core/config/config-sources.js.map +1 -1
  7. package/dist/core/config/config-validator.js +189 -8
  8. package/dist/core/config/config-validator.js.map +1 -1
  9. package/dist/core/config/file-loader.js.map +1 -1
  10. package/dist/core/config/index.js.map +1 -1
  11. package/dist/core/config/schema.js +35 -4
  12. package/dist/core/config/schema.js.map +1 -1
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.js +2 -2
  15. package/dist/core/database/adapters/drizzle.js.map +1 -1
  16. package/dist/core/database/adapters/index.js.map +1 -1
  17. package/dist/core/database/adapters/mongodb.d.ts +1 -0
  18. package/dist/core/database/adapters/mongodb.js +16 -0
  19. package/dist/core/database/adapters/mongodb.js.map +1 -1
  20. package/dist/core/database/adapters/mysql.d.ts +1 -0
  21. package/dist/core/database/adapters/mysql.js +13 -2
  22. package/dist/core/database/adapters/mysql.js.map +1 -1
  23. package/dist/core/database/adapters/postgresql.js +2 -2
  24. package/dist/core/database/adapters/postgresql.js.map +1 -1
  25. package/dist/core/database/adapters/redis.js.map +1 -1
  26. package/dist/core/database/adapters/sql-safety.js +5 -4
  27. package/dist/core/database/adapters/sql-safety.js.map +1 -1
  28. package/dist/core/database/adapters/sqlite.js.map +1 -1
  29. package/dist/core/database/index.js.map +1 -1
  30. package/dist/core/docs/index.js +11 -7
  31. package/dist/core/docs/index.js.map +1 -1
  32. package/dist/core/docs/openapi-generator.js +8 -6
  33. package/dist/core/docs/openapi-generator.js.map +1 -1
  34. package/dist/core/docs/schema-to-openapi.js +3 -3
  35. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  36. package/dist/core/docs/simple-docs.js.map +1 -1
  37. package/dist/core/docs/swagger-ui.js.map +1 -1
  38. package/dist/core/docs/zod-to-openapi.js +2 -2
  39. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  40. package/dist/core/events/event-bus.js +14 -5
  41. package/dist/core/events/event-bus.js.map +1 -1
  42. package/dist/core/events/index.js.map +1 -1
  43. package/dist/core/framework.d.ts +41 -3
  44. package/dist/core/framework.js +342 -95
  45. package/dist/core/framework.js.map +1 -1
  46. package/dist/core/graphql/adapter.js.map +1 -1
  47. package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -1
  48. package/dist/core/graphql/core.js.map +1 -1
  49. package/dist/core/graphql/index.js.map +1 -1
  50. package/dist/core/graphql/loader.js.map +1 -1
  51. package/dist/core/graphql/types.js.map +1 -1
  52. package/dist/core/grpc/adapters/grpc-js-adapter.js +4 -0
  53. package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -1
  54. package/dist/core/grpc/adapters/index.js.map +1 -1
  55. package/dist/core/grpc/grpc-adapter.js.map +1 -1
  56. package/dist/core/grpc/grpc-manager.js.map +1 -1
  57. package/dist/core/grpc/index.js.map +1 -1
  58. package/dist/core/grpc/middleware/auth.js +1 -1
  59. package/dist/core/grpc/middleware/auth.js.map +1 -1
  60. package/dist/core/grpc/middleware/logging.js.map +1 -1
  61. package/dist/core/grpc/middleware/validation.js +1 -1
  62. package/dist/core/grpc/middleware/validation.js.map +1 -1
  63. package/dist/core/grpc/types.d.ts +7 -7
  64. package/dist/core/grpc/types.js.map +1 -1
  65. package/dist/core/http/http-server.d.ts +17 -23
  66. package/dist/core/http/http-server.js +109 -249
  67. package/dist/core/http/http-server.js.map +1 -1
  68. package/dist/core/http/http2-server.d.ts +6 -16
  69. package/dist/core/http/http2-server.js +40 -83
  70. package/dist/core/http/http2-server.js.map +1 -1
  71. package/dist/core/http/index.d.ts +1 -0
  72. package/dist/core/http/index.js +3 -0
  73. package/dist/core/http/index.js.map +1 -1
  74. package/dist/core/http/moro-engine-server.d.ts +263 -0
  75. package/dist/core/http/moro-engine-server.js +1962 -0
  76. package/dist/core/http/moro-engine-server.js.map +1 -0
  77. package/dist/core/http/utils/compression.d.ts +47 -0
  78. package/dist/core/http/utils/compression.js +132 -0
  79. package/dist/core/http/utils/compression.js.map +1 -0
  80. package/dist/core/http/utils/lazy-event-emitter.d.ts +11 -0
  81. package/dist/core/http/utils/lazy-event-emitter.js +69 -0
  82. package/dist/core/http/utils/lazy-event-emitter.js.map +1 -0
  83. package/dist/core/http/utils/multipart-parser.d.ts +32 -0
  84. package/dist/core/http/utils/multipart-parser.js +215 -0
  85. package/dist/core/http/utils/multipart-parser.js.map +1 -0
  86. package/dist/core/http/utils/query-parser.d.ts +1 -0
  87. package/dist/core/http/utils/query-parser.js +44 -0
  88. package/dist/core/http/utils/query-parser.js.map +1 -0
  89. package/dist/core/http/utils/size.d.ts +33 -0
  90. package/dist/core/http/utils/size.js +37 -0
  91. package/dist/core/http/utils/size.js.map +1 -0
  92. package/dist/core/http/utils/ssl-config.d.ts +69 -0
  93. package/dist/core/http/utils/ssl-config.js +116 -0
  94. package/dist/core/http/utils/ssl-config.js.map +1 -0
  95. package/dist/core/http/utils/uws-worker-clustering.js +45 -32
  96. package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
  97. package/dist/core/http/uws-http-server.d.ts +25 -3
  98. package/dist/core/http/uws-http-server.js +465 -86
  99. package/dist/core/http/uws-http-server.js.map +1 -1
  100. package/dist/core/jobs/cron-parser.js +7 -5
  101. package/dist/core/jobs/cron-parser.js.map +1 -1
  102. package/dist/core/jobs/index.js.map +1 -1
  103. package/dist/core/jobs/job-executor.d.ts +1 -1
  104. package/dist/core/jobs/job-executor.js.map +1 -1
  105. package/dist/core/jobs/job-scheduler.d.ts +3 -3
  106. package/dist/core/jobs/job-scheduler.js.map +1 -1
  107. package/dist/core/jobs/job-state-manager.d.ts +3 -3
  108. package/dist/core/jobs/job-state-manager.js +25 -4
  109. package/dist/core/jobs/job-state-manager.js.map +1 -1
  110. package/dist/core/jobs/leader-election.d.ts +15 -0
  111. package/dist/core/jobs/leader-election.js +158 -69
  112. package/dist/core/jobs/leader-election.js.map +1 -1
  113. package/dist/core/jobs/types.d.ts +4 -4
  114. package/dist/core/jobs/types.js.map +1 -1
  115. package/dist/core/jobs/utils.d.ts +1 -1
  116. package/dist/core/jobs/utils.js +7 -3
  117. package/dist/core/jobs/utils.js.map +1 -1
  118. package/dist/core/logger/filters.js +3 -2
  119. package/dist/core/logger/filters.js.map +1 -1
  120. package/dist/core/logger/index.js.map +1 -1
  121. package/dist/core/logger/logger.js +56 -25
  122. package/dist/core/logger/logger.js.map +1 -1
  123. package/dist/core/logger/outputs.js.map +1 -1
  124. package/dist/core/mail/adapters/console-adapter.js.map +1 -1
  125. package/dist/core/mail/adapters/index.js.map +1 -1
  126. package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -1
  127. package/dist/core/mail/adapters/resend-adapter.js.map +1 -1
  128. package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -1
  129. package/dist/core/mail/adapters/ses-adapter.js.map +1 -1
  130. package/dist/core/mail/index.js.map +1 -1
  131. package/dist/core/mail/mail-adapter.js.map +1 -1
  132. package/dist/core/mail/mail-manager.d.ts +10 -0
  133. package/dist/core/mail/mail-manager.js +21 -5
  134. package/dist/core/mail/mail-manager.js.map +1 -1
  135. package/dist/core/mail/template-engine.js.map +1 -1
  136. package/dist/core/mail/types.js.map +1 -1
  137. package/dist/core/middleware/built-in/auth/core.js +3 -3
  138. package/dist/core/middleware/built-in/auth/core.js.map +1 -1
  139. package/dist/core/middleware/built-in/auth/helpers.js +4 -4
  140. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
  141. package/dist/core/middleware/built-in/auth/hook.js.map +1 -1
  142. package/dist/core/middleware/built-in/auth/index.js.map +1 -1
  143. package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +4 -4
  144. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
  145. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -1
  146. package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
  147. package/dist/core/middleware/built-in/body-parsers/index.js.map +1 -1
  148. package/dist/core/middleware/built-in/body-size/core.js +2 -2
  149. package/dist/core/middleware/built-in/body-size/core.js.map +1 -1
  150. package/dist/core/middleware/built-in/body-size/hook.js.map +1 -1
  151. package/dist/core/middleware/built-in/body-size/index.js.map +1 -1
  152. package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -1
  153. package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -1
  154. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
  155. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -1
  156. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
  157. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
  158. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -1
  159. package/dist/core/middleware/built-in/cache/core.js.map +1 -1
  160. package/dist/core/middleware/built-in/cache/hook.js +3 -3
  161. package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
  162. package/dist/core/middleware/built-in/cache/index.js.map +1 -1
  163. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -1
  164. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
  165. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
  166. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
  167. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -1
  168. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -1
  169. package/dist/core/middleware/built-in/cdn/core.js.map +1 -1
  170. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -1
  171. package/dist/core/middleware/built-in/cdn/index.js.map +1 -1
  172. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -1
  173. package/dist/core/middleware/built-in/compression/core.d.ts +3 -0
  174. package/dist/core/middleware/built-in/compression/core.js +28 -34
  175. package/dist/core/middleware/built-in/compression/core.js.map +1 -1
  176. package/dist/core/middleware/built-in/compression/hook.js.map +1 -1
  177. package/dist/core/middleware/built-in/compression/index.js.map +1 -1
  178. package/dist/core/middleware/built-in/compression/middleware.js.map +1 -1
  179. package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
  180. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
  181. package/dist/core/middleware/built-in/cookie/index.js.map +1 -1
  182. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -1
  183. package/dist/core/middleware/built-in/cors/core.js.map +1 -1
  184. package/dist/core/middleware/built-in/cors/hook.js.map +1 -1
  185. package/dist/core/middleware/built-in/cors/index.js.map +1 -1
  186. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -1
  187. package/dist/core/middleware/built-in/csp/core.js.map +1 -1
  188. package/dist/core/middleware/built-in/csp/hook.js.map +1 -1
  189. package/dist/core/middleware/built-in/csp/index.js.map +1 -1
  190. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -1
  191. package/dist/core/middleware/built-in/csrf/core.js +1 -1
  192. package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
  193. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -1
  194. package/dist/core/middleware/built-in/csrf/index.js.map +1 -1
  195. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -1
  196. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -1
  197. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -1
  198. package/dist/core/middleware/built-in/graphql/core.js.map +1 -1
  199. package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -1
  200. package/dist/core/middleware/built-in/graphql/hook.js.map +1 -1
  201. package/dist/core/middleware/built-in/graphql/index.js.map +1 -1
  202. package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -1
  203. package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -1
  204. package/dist/core/middleware/built-in/helmet/core.js.map +1 -1
  205. package/dist/core/middleware/built-in/helmet/hook.js.map +1 -1
  206. package/dist/core/middleware/built-in/helmet/index.js.map +1 -1
  207. package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -1
  208. package/dist/core/middleware/built-in/http2/core.js.map +1 -1
  209. package/dist/core/middleware/built-in/http2/hook.js.map +1 -1
  210. package/dist/core/middleware/built-in/http2/index.js.map +1 -1
  211. package/dist/core/middleware/built-in/http2/middleware.js.map +1 -1
  212. package/dist/core/middleware/built-in/index.js.map +1 -1
  213. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -1
  214. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -1
  215. package/dist/core/middleware/built-in/range/core.js +4 -1
  216. package/dist/core/middleware/built-in/range/core.js.map +1 -1
  217. package/dist/core/middleware/built-in/range/hook.js.map +1 -1
  218. package/dist/core/middleware/built-in/range/index.js.map +1 -1
  219. package/dist/core/middleware/built-in/range/middleware.js.map +1 -1
  220. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
  221. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -1
  222. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -1
  223. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -1
  224. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -1
  225. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -1
  226. package/dist/core/middleware/built-in/session/core.js +4 -4
  227. package/dist/core/middleware/built-in/session/core.js.map +1 -1
  228. package/dist/core/middleware/built-in/session/hook.js.map +1 -1
  229. package/dist/core/middleware/built-in/session/index.js.map +1 -1
  230. package/dist/core/middleware/built-in/session/middleware.js.map +1 -1
  231. package/dist/core/middleware/built-in/sse/core.js.map +1 -1
  232. package/dist/core/middleware/built-in/sse/hook.js.map +1 -1
  233. package/dist/core/middleware/built-in/sse/index.js.map +1 -1
  234. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -1
  235. package/dist/core/middleware/built-in/static/core.js.map +1 -1
  236. package/dist/core/middleware/built-in/static/hook.js.map +1 -1
  237. package/dist/core/middleware/built-in/static/index.js.map +1 -1
  238. package/dist/core/middleware/built-in/static/middleware.js.map +1 -1
  239. package/dist/core/middleware/built-in/template/core.js +1 -1
  240. package/dist/core/middleware/built-in/template/core.js.map +1 -1
  241. package/dist/core/middleware/built-in/template/hook.js.map +1 -1
  242. package/dist/core/middleware/built-in/template/index.js.map +1 -1
  243. package/dist/core/middleware/built-in/template/middleware.js.map +1 -1
  244. package/dist/core/middleware/built-in/upload/core.js.map +1 -1
  245. package/dist/core/middleware/built-in/upload/hook.js.map +1 -1
  246. package/dist/core/middleware/built-in/upload/index.js.map +1 -1
  247. package/dist/core/middleware/built-in/upload/middleware.js.map +1 -1
  248. package/dist/core/middleware/built-in/validation/core.js.map +1 -1
  249. package/dist/core/middleware/built-in/validation/hook.js.map +1 -1
  250. package/dist/core/middleware/built-in/validation/index.js.map +1 -1
  251. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
  252. package/dist/core/middleware/index.js +2 -2
  253. package/dist/core/middleware/index.js.map +1 -1
  254. package/dist/core/modules/auto-discovery.js +11 -7
  255. package/dist/core/modules/auto-discovery.js.map +1 -1
  256. package/dist/core/modules/index.js.map +1 -1
  257. package/dist/core/modules/modules.js +18 -13
  258. package/dist/core/modules/modules.js.map +1 -1
  259. package/dist/core/networking/adapters/engine-adapter.d.ts +23 -0
  260. package/dist/core/networking/adapters/engine-adapter.js +365 -0
  261. package/dist/core/networking/adapters/engine-adapter.js.map +1 -0
  262. package/dist/core/networking/adapters/index.d.ts +1 -0
  263. package/dist/core/networking/adapters/index.js +1 -0
  264. package/dist/core/networking/adapters/index.js.map +1 -1
  265. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -0
  266. package/dist/core/networking/adapters/socketio-adapter.js +12 -1
  267. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  268. package/dist/core/networking/adapters/uws-adapter.js +27 -16
  269. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  270. package/dist/core/networking/adapters/ws-adapter.d.ts +15 -0
  271. package/dist/core/networking/adapters/ws-adapter.js +120 -6
  272. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  273. package/dist/core/networking/index.js.map +1 -1
  274. package/dist/core/networking/service-discovery.js +7 -5
  275. package/dist/core/networking/service-discovery.js.map +1 -1
  276. package/dist/core/networking/websocket-adapter.d.ts +22 -3
  277. package/dist/core/networking/websocket-adapter.js.map +1 -1
  278. package/dist/core/networking/websocket-manager.js +70 -67
  279. package/dist/core/networking/websocket-manager.js.map +1 -1
  280. package/dist/core/pooling/object-pool-manager.js +6 -0
  281. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  282. package/dist/core/queue/adapters/bull-adapter.js.map +1 -1
  283. package/dist/core/queue/adapters/index.js.map +1 -1
  284. package/dist/core/queue/adapters/kafka-adapter.js +2 -2
  285. package/dist/core/queue/adapters/kafka-adapter.js.map +1 -1
  286. package/dist/core/queue/adapters/memory-adapter.js +6 -6
  287. package/dist/core/queue/adapters/memory-adapter.js.map +1 -1
  288. package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +50 -0
  289. package/dist/core/queue/adapters/rabbitmq-adapter.js +176 -20
  290. package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -1
  291. package/dist/core/queue/adapters/sqs-adapter.d.ts +12 -2
  292. package/dist/core/queue/adapters/sqs-adapter.js +75 -24
  293. package/dist/core/queue/adapters/sqs-adapter.js.map +1 -1
  294. package/dist/core/queue/index.js.map +1 -1
  295. package/dist/core/queue/middleware/index.js.map +1 -1
  296. package/dist/core/queue/middleware/monitoring.d.ts +1 -1
  297. package/dist/core/queue/middleware/monitoring.js.map +1 -1
  298. package/dist/core/queue/middleware/priority.js +2 -1
  299. package/dist/core/queue/middleware/priority.js.map +1 -1
  300. package/dist/core/queue/middleware/rate-limit.js.map +1 -1
  301. package/dist/core/queue/queue-adapter.js.map +1 -1
  302. package/dist/core/queue/queue-manager.js.map +1 -1
  303. package/dist/core/queue/types.d.ts +8 -8
  304. package/dist/core/queue/types.js.map +1 -1
  305. package/dist/core/routing/app-integration.js.map +1 -1
  306. package/dist/core/routing/create-router.js.map +1 -1
  307. package/dist/core/routing/index.js.map +1 -1
  308. package/dist/core/routing/path-matcher.js.map +1 -1
  309. package/dist/core/routing/radix-tree.js.map +1 -1
  310. package/dist/core/routing/router.js.map +1 -1
  311. package/dist/core/routing/unified-router.js +12 -4
  312. package/dist/core/routing/unified-router.js.map +1 -1
  313. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  314. package/dist/core/runtime/base-adapter.js +2 -2
  315. package/dist/core/runtime/base-adapter.js.map +1 -1
  316. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -0
  317. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  318. package/dist/core/runtime/index.js.map +1 -1
  319. package/dist/core/runtime/node-adapter.js +19 -17
  320. package/dist/core/runtime/node-adapter.js.map +1 -1
  321. package/dist/core/runtime/vercel-edge-adapter.js +2 -0
  322. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  323. package/dist/core/utilities/circuit-breaker.d.ts +1 -0
  324. package/dist/core/utilities/circuit-breaker.js +25 -2
  325. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  326. package/dist/core/utilities/container.js +9 -9
  327. package/dist/core/utilities/container.js.map +1 -1
  328. package/dist/core/utilities/hooks.js +28 -6
  329. package/dist/core/utilities/hooks.js.map +1 -1
  330. package/dist/core/utilities/index.js.map +1 -1
  331. package/dist/core/utilities/module-path.js.map +1 -1
  332. package/dist/core/utilities/package-utils.d.ts +68 -0
  333. package/dist/core/utilities/package-utils.js +198 -1
  334. package/dist/core/utilities/package-utils.js.map +1 -1
  335. package/dist/core/utilities/response-helpers.js +1 -1
  336. package/dist/core/utilities/response-helpers.js.map +1 -1
  337. package/dist/core/validation/adapters.js.map +1 -1
  338. package/dist/core/validation/error-handler.js.map +1 -1
  339. package/dist/core/validation/index.js.map +1 -1
  340. package/dist/core/validation/schema-interface.js.map +1 -1
  341. package/dist/core/workers/facade.js.map +1 -1
  342. package/dist/core/workers/index.js.map +1 -1
  343. package/dist/core/workers/worker-entry.d.ts +1 -0
  344. package/dist/core/workers/worker-entry.js +12 -0
  345. package/dist/core/workers/worker-entry.js.map +1 -0
  346. package/dist/core/workers/worker-manager.d.ts +23 -2
  347. package/dist/core/workers/worker-manager.js +117 -17
  348. package/dist/core/workers/worker-manager.js.map +1 -1
  349. package/dist/core/workers/worker.js +8 -6
  350. package/dist/core/workers/worker.js.map +1 -1
  351. package/dist/index.d.ts +2 -2
  352. package/dist/index.js +5 -2
  353. package/dist/index.js.map +1 -1
  354. package/dist/moro.d.ts +20 -1
  355. package/dist/moro.js +230 -70
  356. package/dist/moro.js.map +1 -1
  357. package/dist/types/auth.d.ts +4 -4
  358. package/dist/types/auth.js.map +1 -1
  359. package/dist/types/cache.js.map +1 -1
  360. package/dist/types/cdn.js.map +1 -1
  361. package/dist/types/config.d.ts +100 -15
  362. package/dist/types/config.js.map +1 -1
  363. package/dist/types/core.js.map +1 -1
  364. package/dist/types/database.js.map +1 -1
  365. package/dist/types/discovery.js.map +1 -1
  366. package/dist/types/events.js.map +1 -1
  367. package/dist/types/hooks.js.map +1 -1
  368. package/dist/types/http.js.map +1 -1
  369. package/dist/types/logger.js.map +1 -1
  370. package/dist/types/module.js.map +1 -1
  371. package/dist/types/runtime.js.map +1 -1
  372. package/dist/types/session.js.map +1 -1
  373. package/package.json +32 -17
package/README.md CHANGED
@@ -21,28 +21,20 @@
21
21
  Build high-performance APIs with intelligent routing that automatically orders middleware execution. Deploy anywhere: Node.js, Vercel Edge, AWS Lambda, or Cloudflare Workers - same code, zero configuration.
22
22
 
23
23
  **Key Features:**
24
- - **200k+ req/s** - built-in clustering or uWebSockets.js integration (single core)
24
+
25
+ - **Native C++ Engine** - ~102k req/s real-world through the full framework, 572k pipelined, on a single thread
25
26
  - **Intelligent Routing** - Automatic middleware ordering, no configuration needed
26
- - **Enterprise Auth** - Built-in Auth.js with OAuth & RBAC
27
+ - **Enterprise Auth** - Built-in Better Auth with OAuth & RBAC
27
28
  - **Universal Validation** - Works with Zod, Joi, Yup, or Class Validator
28
29
  - **Message Queues** - Production-ready queues (Bull, RabbitMQ, SQS, Kafka)
29
30
  - **gRPC Support** - Native gRPC for high-performance microservices
30
31
  - **Multi-Runtime** - Deploy to Node.js, Edge, Lambda, or Workers
31
32
  - **Powerful CLI** - Scaffold projects, generate modules, deploy with one command
32
- - **Zero Dependencies** - Lightweight core with optional integrations
33
+ - **Zero third-party dependencies** - lightweight core (just Moro's own native engine) with optional integrations
33
34
 
34
35
  ## Performance
35
36
 
36
- | Framework | Req/sec | Latency | Memory | Notes |
37
- |-----------|---------|---------|--------|-------|
38
- | **Moro + uWebSockets.js** | **200,000+** | **3.93ms** | **25MB** | Single core |
39
- | **Moro (Clustering)** | **190,000+** | **3.62ms** | **24MB** | Multi-core |
40
- | **Moro (Standard)** | **87,000** | **7.8ms** | **14MB** | Single core |
41
- | Fastify | 38,120 | 2.9ms | 35MB | Single core |
42
- | Express | 28,540 | 3.8ms | 45MB | Single core |
43
- | NestJS | 22,100 | 4.5ms | 58MB | Single core |
44
-
45
- > **uWebSockets.js** achieves multi-core performance on a single core - perfect for WebSockets and serverless. **Clustering** scales across CPU cores for traditional HTTP workloads.
37
+ MoroJS is the fastest Node.js framework we've measured (not just because its ours) — its native engine beats uWebSockets.js in both benchmark profiles while running the **full framework** (routing, validation, middleware): **~102k req/s real-world at 0.9 ms latency** and **572k req/s pipelined**, on a single thread. That's ~1.5× Fastify and ~2× Express out of the box. Full comparison tables, methodology, and saved results live in the **[MoroJS Benchmark repo](https://github.com/Moro-JS/benchmark)**.
46
38
 
47
39
  ## Quick Start
48
40
 
@@ -50,26 +42,33 @@ Build high-performance APIs with intelligent routing that automatically orders m
50
42
 
51
43
  ```bash
52
44
  npm install @morojs/moro
45
+ npm install zod # peer dependency used by the `z` validation helper below
53
46
  ```
54
47
 
55
48
  ```typescript
56
49
  import { createApp, z } from '@morojs/moro';
57
50
 
58
- const app = createApp();
59
-
60
- // Intelligent routing - order doesn't matter!
61
- app.post('/users')
62
- .body(z.object({
63
- name: z.string().min(2),
64
- email: z.string().email()
65
- }))
66
- .rateLimit({ requests: 10, window: 60000 })
67
- .handler((req, res) => {
68
- // req.body is fully typed and validated
69
- return { success: true, data: req.body };
70
- });
71
-
72
- app.listen(3000);
51
+ // createApp() is async — await it inside an async context
52
+ (async () => {
53
+ const app = await createApp();
54
+
55
+ // Intelligent routing - order doesn't matter!
56
+ app
57
+ .post('/users')
58
+ .body(
59
+ z.object({
60
+ name: z.string().min(2),
61
+ email: z.string().email(),
62
+ })
63
+ )
64
+ .rateLimit({ requests: 10, window: 60000 })
65
+ .handler((req, res) => {
66
+ // req.body is fully typed and validated
67
+ return { success: true, data: req.body };
68
+ });
69
+
70
+ app.listen(3000);
71
+ })();
73
72
  ```
74
73
 
75
74
  ### Or Use the CLI
@@ -85,31 +84,74 @@ npm run dev
85
84
 
86
85
  Learn more at [morojs.com/cli](https://morojs.com/cli)
87
86
 
88
- ### Ultra-High Performance (Optional)
87
+ ### HTTP Engine
88
+
89
+ Moro ships its own native HTTP engine (`@morojs/engine`) and uses it by default,
90
+ falling back to the Node.js http server wherever a prebuilt binary isn't
91
+ available. Pick the backend with `server.engine`:
89
92
 
90
93
  ```typescript
91
- // uWebSockets.js - 200k+ req/s on single core
92
- const app = createApp({
94
+ // createApp() is async — top-level await (ESM) or wrap in an async function
95
+ const app = await createApp({
93
96
  server: {
94
- useUWebSockets: true
95
- }
97
+ engine: 'moro', // default - Moro's native engine (Node.js fallback if it can't load)
98
+ // engine: 'node' - the Node.js http server (no native engine)
99
+ // engine: 'uws' - opt in to uWebSockets.js
100
+ },
96
101
  });
97
102
 
98
- // Or combine with worker thread clustering for even more power
99
- const app = createApp({
103
+ // Check which engine actually booted (logged at startup too)
104
+ app.engine; // { server, enginePackage?, engineVersion?, protocols?, fallbackReason? }
105
+ ```
106
+
107
+ #### TLS / HTTPS (unified config)
108
+
109
+ One `server.ssl` config flows to whichever runtime serves — the Moro engine terminates TLS in-process, as do the Node https server, uWebSockets.js (file paths only), and the HTTP/2 server. Both shapes are accepted:
110
+
111
+ ```typescript
112
+ // Inline PEM (node-style) — works on engine, node, http2
113
+ createApp({ server: { engine: 'moro', ssl: { key, cert, ca } } });
114
+
115
+ // File paths — works on every runtime incl. uWS
116
+ createApp({ server: { engine: 'moro', ssl: { keyFile: './key.pem', certFile: './cert.pem' } } });
117
+ ```
118
+
119
+ #### HTTP/2
120
+
121
+ `http2: true` serves ALPN h2 + http/1.1. When `engine: 'moro'` and the engine
122
+ build supports h2 it is served natively; otherwise Moro uses its dedicated
123
+ HTTP/2 server. Requires TLS.
124
+
125
+ ```typescript
126
+ createApp({ server: { engine: 'moro', http2: true, ssl: { key, cert } } });
127
+ ```
128
+
129
+ #### Configurable limits (no arbitrary caps)
130
+
131
+ Every limit is a documented default you can override; values flow through to
132
+ the engine. Nothing is silently capped.
133
+
134
+ ```typescript
135
+ createApp({
100
136
  server: {
101
- useUWebSockets: true
137
+ bodySizeLimit: '10mb', // maxUploadSize: '100mb' for multipart
138
+ maxConnections: 0, // 0 = unlimited
139
+ timeouts: { request: 30000, idle: 0, keepAlive: 5000, headers: 6000 },
140
+ limits: {
141
+ maxHeaderSize: '64kb',
142
+ maxHeaders: 100,
143
+ wsMaxMessageSize: '16mb',
144
+ wsBackpressureLimit: '1mb',
145
+ multipart: { maxParts: 1000, maxFiles: 20, maxFileSize: '25mb' },
146
+ },
102
147
  },
103
- performance: {
104
- clustering: {
105
- enabled: true,
106
- workers: 4 // or 'auto' for CPU count
107
- }
108
- }
109
148
  });
110
149
  ```
111
150
 
112
- See [uWebSockets Guide](./docs/UWEBSOCKETS_GUIDE.md)
151
+ See [HTTP Engine Guide](./docs/UWEBSOCKETS_GUIDE.md),
152
+ [HTTP/2 Guide](./docs/HTTP2_GUIDE.md), and the
153
+ [Configuration Reference](./docs/CONFIGURATION_REFERENCE.md) for the full
154
+ defaults table.
113
155
 
114
156
  ## Deploy Everywhere
115
157
 
@@ -144,9 +186,10 @@ export default { fetch: app.getHandler() };
144
186
  ## Examples
145
187
 
146
188
  Check out [working examples](https://github.com/Moro-JS/examples) for:
189
+
147
190
  - REST APIs with validation
148
191
  - Real-time WebSocket apps
149
- - Auth.js integration
192
+ - Better Auth integration
150
193
  - Multi-runtime deployment
151
194
  - Database integration
152
195
  - And more...
@@ -155,9 +198,9 @@ Check out [working examples](https://github.com/Moro-JS/examples) for:
155
198
 
156
199
  **vs Express** - Intelligent middleware ordering eliminates configuration complexity and race conditions
157
200
 
158
- **vs Fastify** - 4x faster with uWebSockets.js, plus multi-runtime deployment without adapters
201
+ **vs Fastify** - ~1.5x the throughput out of the box (Moro's native engine), plus multi-runtime deployment without adapters
159
202
 
160
- **vs NestJS** - Functional architecture without decorators, 9x faster, 3x less memory
203
+ **vs NestJS** - Functional architecture without decorators, with a fraction of the per-request overhead
161
204
 
162
205
  ## Contributing
163
206
 
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * @see https://better-auth.com/
8
8
  */
9
+ import { randomBytes } from 'crypto';
9
10
  import { createFrameworkLogger } from '../logger/index.js';
10
11
  import { resolveUserPackage } from '../utilities/package-utils.js';
11
12
  const logger = createFrameworkLogger('AuthAdapter');
@@ -67,62 +68,84 @@ function toWebRequest(req, basePath) {
67
68
  return new Request(url.toString(), {
68
69
  method: req.method || 'GET',
69
70
  headers,
70
- body,
71
+ ...(body !== undefined ? { body } : {}),
71
72
  });
72
73
  }
74
+ /**
75
+ * Parse a single Set-Cookie header value and apply it to the MoroJS response.
76
+ */
77
+ function applySetCookie(moroResponse, cookie) {
78
+ const [nameValue, ...options] = cookie.split('; ');
79
+ if (nameValue === undefined)
80
+ return;
81
+ const eq = nameValue.indexOf('=');
82
+ if (eq <= 0)
83
+ return;
84
+ const name = nameValue.slice(0, eq);
85
+ const cookieValue = nameValue.slice(eq + 1);
86
+ const cookieOptions = {};
87
+ options.forEach(option => {
88
+ const optEq = option.indexOf('=');
89
+ const optKey = (optEq === -1 ? option : option.slice(0, optEq)).toLowerCase();
90
+ const optValue = optEq === -1 ? '' : option.slice(optEq + 1);
91
+ switch (optKey) {
92
+ case 'max-age':
93
+ cookieOptions.maxAge = parseInt(optValue, 10);
94
+ break;
95
+ case 'expires':
96
+ cookieOptions.expires = new Date(optValue);
97
+ break;
98
+ case 'httponly':
99
+ cookieOptions.httpOnly = true;
100
+ break;
101
+ case 'secure':
102
+ cookieOptions.secure = true;
103
+ break;
104
+ case 'samesite':
105
+ cookieOptions.sameSite = optValue;
106
+ break;
107
+ case 'path':
108
+ cookieOptions.path = optValue;
109
+ break;
110
+ case 'domain':
111
+ cookieOptions.domain = optValue;
112
+ break;
113
+ }
114
+ });
115
+ moroResponse.cookie(name, cookieValue, cookieOptions);
116
+ }
73
117
  /**
74
118
  * Convert Auth.js Web API Response to MoroJS response
75
119
  */
76
120
  async function fromWebResponse(webResponse, moroResponse) {
77
121
  // Set status
78
122
  moroResponse.status(webResponse.status);
79
- // Set headers
123
+ // Set-Cookie is multi-valued and MUST be read via getSetCookie(): the Fetch
124
+ // Headers.forEach() folds multiple Set-Cookie headers into a single
125
+ // comma-joined string, and splitting that on ', ' corrupts any cookie whose
126
+ // Expires attribute contains a comma ("Expires=Wed, 21 Oct 2025 ..."),
127
+ // silently dropping or garbling auth cookies.
128
+ const getSetCookie = webResponse.headers.getSetCookie;
129
+ const setCookies = typeof getSetCookie === 'function' ? getSetCookie.call(webResponse.headers) : [];
130
+ for (const cookie of setCookies) {
131
+ applySetCookie(moroResponse, cookie);
132
+ }
133
+ // Set remaining headers
80
134
  webResponse.headers.forEach((value, key) => {
81
- if (key.toLowerCase() === 'set-cookie') {
82
- // Handle cookies specially for MoroJS
83
- const cookies = value.split(', ');
84
- cookies.forEach(cookie => {
85
- const [nameValue, ...options] = cookie.split('; ');
86
- const [name, cookieValue] = nameValue.split('=');
87
- // Parse cookie options
88
- const cookieOptions = {};
89
- options.forEach(option => {
90
- const [optKey, optValue] = option.split('=');
91
- switch (optKey.toLowerCase()) {
92
- case 'max-age':
93
- cookieOptions.maxAge = parseInt(optValue, 10);
94
- break;
95
- case 'expires':
96
- cookieOptions.expires = new Date(optValue);
97
- break;
98
- case 'httponly':
99
- cookieOptions.httpOnly = true;
100
- break;
101
- case 'secure':
102
- cookieOptions.secure = true;
103
- break;
104
- case 'samesite':
105
- cookieOptions.sameSite = optValue;
106
- break;
107
- case 'path':
108
- cookieOptions.path = optValue;
109
- break;
110
- case 'domain':
111
- cookieOptions.domain = optValue;
112
- break;
113
- }
114
- });
115
- moroResponse.cookie(name, cookieValue, cookieOptions);
116
- });
135
+ const lower = key.toLowerCase();
136
+ if (lower === 'set-cookie') {
137
+ // Handled above via getSetCookie(). Fallback for legacy runtimes without
138
+ // it: apply the (best-effort) folded value as a single cookie.
139
+ if (setCookies.length === 0 && value)
140
+ applySetCookie(moroResponse, value);
141
+ return;
117
142
  }
118
- else if (key.toLowerCase() === 'location') {
143
+ if (lower === 'location') {
119
144
  // Handle redirects
120
145
  moroResponse.redirect(value);
121
146
  return;
122
147
  }
123
- else {
124
- moroResponse.setHeader(key, value);
125
- }
148
+ moroResponse.setHeader(key, value);
126
149
  });
127
150
  // Handle response body
128
151
  const contentType = webResponse.headers.get('content-type');
@@ -172,12 +195,39 @@ export async function MoroJSAuth(config) {
172
195
  };
173
196
  }
174
197
  }
198
+ // Resolve the auth secret. Never fall back to an empty string: an empty
199
+ // secret disables the signing/encryption Better Auth relies on. Fail fast in
200
+ // production, and warn-plus-generate elsewhere (matching the built-in auth
201
+ // middleware's behavior).
202
+ const secret = config.secret ||
203
+ process.env.AUTH_SECRET ||
204
+ (() => {
205
+ if (process.env.NODE_ENV === 'production') {
206
+ throw new Error('[MoroJS Security] No auth secret configured. Set config.secret or the AUTH_SECRET environment variable before starting in production.');
207
+ }
208
+ const generated = randomBytes(32).toString('hex');
209
+ logger.warn('[MoroJS Security] No auth secret configured. A random secret was generated — sessions will NOT survive restarts. Set config.secret or AUTH_SECRET for production use.', 'AuthAdapter');
210
+ return generated;
211
+ })();
212
+ const baseURL = config.baseURL || process.env.BASE_URL || process.env.AUTH_URL || 'http://localhost:3000';
213
+ // Default trustedOrigins to the app's own origin instead of a wildcard.
214
+ // trustedOrigins is Better Auth's origin/CSRF defense for state-changing auth
215
+ // routes and its callback/redirect-URL allowlist; ['*'] trusts every origin.
216
+ // Users can override or extend it via config.trustedOrigins.
217
+ let defaultOrigin;
218
+ try {
219
+ defaultOrigin = new URL(baseURL).origin;
220
+ }
221
+ catch {
222
+ defaultOrigin = baseURL;
223
+ }
224
+ const trustedOrigins = config.trustedOrigins ?? [defaultOrigin];
175
225
  // Initialize Better Auth
176
226
  const betterAuthInstance = betterAuth({
177
- secret: config.secret || process.env.AUTH_SECRET || '',
178
- baseURL: process.env.BASE_URL || process.env.AUTH_URL || 'http://localhost:3000',
227
+ secret,
228
+ baseURL,
179
229
  basePath,
180
- trustedOrigins: ['*'],
230
+ trustedOrigins,
181
231
  session: {
182
232
  expiresIn: config.session?.maxAge || 30 * 24 * 60 * 60,
183
233
  updateAge: config.session?.updateAge || 24 * 60 * 60,
@@ -1 +1 @@
1
- {"version":3,"file":"morojs-adapter.js","sourceRoot":"","sources":["../../../src/core/auth/morojs-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"morojs-adapter.js","sourceRoot":"","sources":["../../../src/core/auth/morojs-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Better Auth Adapter for MoroJS\n *\n * This adapter allows Better Auth to work seamlessly with MoroJS framework.\n * Maintains compatibility with the original Auth.js API.\n *\n * @see https://better-auth.com/\n */\n\nimport { randomBytes } from 'crypto';\nimport { createFrameworkLogger } from '../logger/index.js';\nimport { resolveUserPackage } from '../utilities/package-utils.js';\n\nconst logger = createFrameworkLogger('AuthAdapter');\n\n// Lazy load Better Auth (optional dependency)\nlet betterAuthModule: any = null;\n\n/**\n * Dynamically load Better Auth from user's node_modules\n * This ensures it's only required when actually used\n */\nasync function loadBetterAuth() {\n if (betterAuthModule) {\n return betterAuthModule;\n }\n\n try {\n const betterAuthPath = resolveUserPackage('better-auth');\n betterAuthModule = await import(betterAuthPath);\n return betterAuthModule;\n } catch {\n throw new Error(\n 'Better Auth package not found. Install it with: npm install better-auth\\n' +\n 'See: https://better-auth.com/ for setup instructions'\n );\n }\n}\n\n// Auth types (compatible with Auth.js)\nexport interface AuthConfig {\n providers: any[];\n secret?: string;\n session?: any;\n callbacks?: any;\n events?: any;\n pages?: any;\n adapter?: any;\n debug?: boolean;\n basePath?: string;\n [key: string]: any;\n}\n\nexport interface Session {\n user: {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n [key: string]: any;\n };\n expires: string;\n [key: string]: any;\n}\n\nexport type AuthAction = 'signin' | 'signout' | 'callback' | 'session' | 'providers' | 'csrf';\n\n// MoroJS-specific types\nexport interface MoroJSAuthConfig extends Omit<AuthConfig, 'raw'> {\n /**\n * Base path for auth routes in MoroJS\n * @default \"/api/auth\"\n */\n basePath?: string;\n\n /**\n * MoroJS-specific options\n */\n morojs?: {\n /**\n * Enable MoroJS-specific logging\n * @default false\n */\n debug?: boolean;\n\n /**\n * Custom request/response transformers\n */\n transformers?: {\n request?: (req: any) => any;\n response?: (res: any) => any;\n };\n };\n}\n\nexport interface MoroJSRequest {\n url?: string;\n method?: string;\n headers?: Record<string, string>;\n body?: any;\n query?: Record<string, string>;\n cookies?: Record<string, string>;\n}\n\nexport interface MoroJSResponse {\n status(code: number): MoroJSResponse;\n json(data: any): Promise<void>;\n redirect(url: string): void;\n setHeader(name: string, value: string): void;\n cookie(name: string, value: string, options?: any): void;\n send(data: any): void;\n end(data?: any): void;\n headersSent: boolean;\n}\n\n/**\n * Convert MoroJS request to Auth.js Web API Request\n */\nfunction toWebRequest(req: MoroJSRequest, basePath: string): Request {\n const url = new URL(req.url || '/', 'http://localhost:3000');\n\n // Handle auth routes\n if (url.pathname.startsWith(basePath)) {\n url.pathname = url.pathname.replace(basePath, '');\n }\n\n const headers = new Headers();\n if (req.headers) {\n Object.entries(req.headers).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n\n // Add cookies to headers if not present - check first key instead of length\n if (req.cookies) {\n let hasCookies = false;\n let cookieHeader = '';\n for (const name in req.cookies) {\n if (Object.prototype.hasOwnProperty.call(req.cookies, name)) {\n if (hasCookies) {\n cookieHeader += `; ${name}=${req.cookies[name]}`;\n } else {\n cookieHeader = `${name}=${req.cookies[name]}`;\n hasCookies = true;\n }\n }\n }\n\n if (hasCookies && !headers.has('cookie')) {\n headers.set('cookie', cookieHeader);\n }\n }\n\n const body = req.body ? JSON.stringify(req.body) : undefined;\n\n return new Request(url.toString(), {\n method: req.method || 'GET',\n headers,\n ...(body !== undefined ? { body } : {}),\n });\n}\n\n/**\n * Parse a single Set-Cookie header value and apply it to the MoroJS response.\n */\nfunction applySetCookie(moroResponse: MoroJSResponse, cookie: string): void {\n const [nameValue, ...options] = cookie.split('; ');\n if (nameValue === undefined) return;\n const eq = nameValue.indexOf('=');\n if (eq <= 0) return;\n const name = nameValue.slice(0, eq);\n const cookieValue = nameValue.slice(eq + 1);\n\n const cookieOptions: any = {};\n options.forEach(option => {\n const optEq = option.indexOf('=');\n const optKey = (optEq === -1 ? option : option.slice(0, optEq)).toLowerCase();\n const optValue = optEq === -1 ? '' : option.slice(optEq + 1);\n switch (optKey) {\n case 'max-age':\n cookieOptions.maxAge = parseInt(optValue, 10);\n break;\n case 'expires':\n cookieOptions.expires = new Date(optValue);\n break;\n case 'httponly':\n cookieOptions.httpOnly = true;\n break;\n case 'secure':\n cookieOptions.secure = true;\n break;\n case 'samesite':\n cookieOptions.sameSite = optValue;\n break;\n case 'path':\n cookieOptions.path = optValue;\n break;\n case 'domain':\n cookieOptions.domain = optValue;\n break;\n }\n });\n\n moroResponse.cookie(name, cookieValue, cookieOptions);\n}\n\n/**\n * Convert Auth.js Web API Response to MoroJS response\n */\nasync function fromWebResponse(webResponse: Response, moroResponse: MoroJSResponse): Promise<void> {\n // Set status\n moroResponse.status(webResponse.status);\n\n // Set-Cookie is multi-valued and MUST be read via getSetCookie(): the Fetch\n // Headers.forEach() folds multiple Set-Cookie headers into a single\n // comma-joined string, and splitting that on ', ' corrupts any cookie whose\n // Expires attribute contains a comma (\"Expires=Wed, 21 Oct 2025 ...\"),\n // silently dropping or garbling auth cookies.\n const getSetCookie = (webResponse.headers as any).getSetCookie;\n const setCookies: string[] =\n typeof getSetCookie === 'function' ? getSetCookie.call(webResponse.headers) : [];\n for (const cookie of setCookies) {\n applySetCookie(moroResponse, cookie);\n }\n\n // Set remaining headers\n webResponse.headers.forEach((value, key) => {\n const lower = key.toLowerCase();\n if (lower === 'set-cookie') {\n // Handled above via getSetCookie(). Fallback for legacy runtimes without\n // it: apply the (best-effort) folded value as a single cookie.\n if (setCookies.length === 0 && value) applySetCookie(moroResponse, value);\n return;\n }\n if (lower === 'location') {\n // Handle redirects\n moroResponse.redirect(value);\n return;\n }\n moroResponse.setHeader(key, value);\n });\n\n // Handle response body\n const contentType = webResponse.headers.get('content-type');\n\n if (webResponse.status >= 300 && webResponse.status < 400) {\n // Redirect - already handled above\n return;\n } else if (contentType?.includes('application/json')) {\n const data = await webResponse.json();\n await moroResponse.json(data);\n } else {\n const text = await webResponse.text();\n moroResponse.send(text);\n }\n}\n\n/**\n * Main MoroJS Better Auth handler\n *\n * This is the core function that integrates Better Auth with MoroJS\n * Maintains API compatibility with the original Auth.js implementation\n */\nexport async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{\n handler: (req: MoroJSRequest, res: MoroJSResponse) => Promise<void>;\n auth: (req: MoroJSRequest) => Promise<Session | null>;\n}> {\n const basePath = config.basePath || '/api/auth';\n\n // Lazy load Better Auth\n const betterAuthModule = await loadBetterAuth();\n const { betterAuth } = betterAuthModule;\n\n // Convert providers to Better Auth format\n const socialProviders: Record<string, any> = {};\n for (const provider of config.providers || []) {\n if (provider.id === 'google' && provider.clientId && provider.clientSecret) {\n socialProviders.google = {\n clientId: provider.clientId,\n clientSecret: provider.clientSecret,\n };\n } else if (provider.id === 'github' && provider.clientId && provider.clientSecret) {\n socialProviders.github = {\n clientId: provider.clientId,\n clientSecret: provider.clientSecret,\n };\n } else if (provider.id === 'discord' && provider.clientId && provider.clientSecret) {\n socialProviders.discord = {\n clientId: provider.clientId,\n clientSecret: provider.clientSecret,\n };\n }\n }\n\n // Resolve the auth secret. Never fall back to an empty string: an empty\n // secret disables the signing/encryption Better Auth relies on. Fail fast in\n // production, and warn-plus-generate elsewhere (matching the built-in auth\n // middleware's behavior).\n const secret =\n config.secret ||\n process.env.AUTH_SECRET ||\n (() => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n '[MoroJS Security] No auth secret configured. Set config.secret or the AUTH_SECRET environment variable before starting in production.'\n );\n }\n const generated = randomBytes(32).toString('hex');\n logger.warn(\n '[MoroJS Security] No auth secret configured. A random secret was generated — sessions will NOT survive restarts. Set config.secret or AUTH_SECRET for production use.',\n 'AuthAdapter'\n );\n return generated;\n })();\n\n const baseURL =\n config.baseURL || process.env.BASE_URL || process.env.AUTH_URL || 'http://localhost:3000';\n\n // Default trustedOrigins to the app's own origin instead of a wildcard.\n // trustedOrigins is Better Auth's origin/CSRF defense for state-changing auth\n // routes and its callback/redirect-URL allowlist; ['*'] trusts every origin.\n // Users can override or extend it via config.trustedOrigins.\n let defaultOrigin: string;\n try {\n defaultOrigin = new URL(baseURL).origin;\n } catch {\n defaultOrigin = baseURL;\n }\n const trustedOrigins = config.trustedOrigins ?? [defaultOrigin];\n\n // Initialize Better Auth\n const betterAuthInstance = betterAuth({\n secret,\n baseURL,\n basePath,\n trustedOrigins,\n session: {\n expiresIn: config.session?.maxAge || 30 * 24 * 60 * 60,\n updateAge: config.session?.updateAge || 24 * 60 * 60,\n },\n socialProviders,\n });\n\n return {\n /**\n * Main request handler for auth routes\n */\n handler: async (req: MoroJSRequest, res: MoroJSResponse) => {\n try {\n // Convert MoroJS request to Web API request\n const webRequest = toWebRequest(req, basePath);\n\n // Apply request transformer if provided\n let transformedRequest = webRequest;\n if (config.morojs?.transformers?.request) {\n transformedRequest = config.morojs.transformers.request(webRequest);\n }\n\n // Call Better Auth handler\n const authResponse = await betterAuthInstance.handler(transformedRequest);\n\n // Apply response transformer if provided\n let finalResponse = authResponse;\n if (config.morojs?.transformers?.response) {\n finalResponse = config.morojs.transformers.response(authResponse);\n }\n\n // Convert Web API response to MoroJS response\n await fromWebResponse(finalResponse, res);\n } catch (error) {\n logger.error('[MoroJS Auth] Error', 'AuthAdapter', {\n error: error instanceof Error ? error.message : String(error),\n });\n // Robust error handling - check if response methods exist\n if (typeof (res as any).status === 'function' && typeof (res as any).json === 'function') {\n (res as any).status(500).json({\n error: 'Internal server error',\n message: config.morojs?.debug ? (error as Error).message : 'Authentication error',\n });\n } else {\n // Fallback to basic Node.js response methods\n (res as any).statusCode = 500;\n (res as any).setHeader('Content-Type', 'application/json');\n (res as any).end(\n JSON.stringify({\n error: 'Internal server error',\n message: config.morojs?.debug ? (error as Error).message : 'Authentication error',\n })\n );\n }\n }\n },\n\n /**\n * Get session for the current request\n */\n auth: async (req: MoroJSRequest): Promise<Session | null> => {\n try {\n // Convert MoroJS request to Web API request\n const webRequest = toWebRequest(req, basePath);\n\n // Get session from Better Auth\n const session = await betterAuthInstance.api.getSession({\n headers: webRequest.headers,\n });\n\n if (session?.user) {\n return {\n user: {\n id: session.user.id,\n name: session.user.name || null,\n email: session.user.email || null,\n image: session.user.image || null,\n },\n expires: new Date(\n session.session?.expiresAt || Date.now() + 30 * 24 * 60 * 60 * 1000\n ).toISOString(),\n };\n }\n\n return null;\n } catch (error) {\n if (config.morojs?.debug) {\n logger.error('[MoroJS Auth] Session error', 'AuthAdapter', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n return null;\n }\n },\n };\n}\n\n/**\n * MoroJS Auth middleware factory\n *\n * This creates a MoroJS-compatible middleware for authentication\n * Uses Better Auth internally while maintaining the same API\n */\nexport function createAuthMiddleware(config: MoroJSAuthConfig) {\n logger.info('createAuthMiddleware called - creating middleware function', 'AuthAdapter');\n // Return a function that MoroJS can call directly\n return async (app: any) => {\n logger.info('Installing Better Auth middleware...', 'AuthAdapter');\n logger.debug('App object received', 'AuthAdapter', {\n appType: typeof app,\n appConstructor: app.constructor.name,\n });\n\n // Get the hooks from the app's middleware system\n const hooks =\n (app as any).coreFramework?.middlewareManager?.hooks || (app as any).middlewareManager?.hooks;\n\n if (!hooks) {\n logger.error('Could not access MoroJS hooks system', 'AuthAdapter');\n return;\n }\n\n const options = {};\n const mergedConfig = { ...config, ...options };\n const authHandlers = await MoroJSAuth(mergedConfig);\n const basePath = mergedConfig.basePath || '/api/auth';\n\n // Register request hook\n hooks.before('request', async (context: any) => {\n logger.debug('Native adapter hook starting', 'AuthAdapter');\n const req = context.request;\n logger.debug('Request path', 'AuthAdapter', { path: req.path || req.url });\n\n try {\n // Get session from Better Auth\n const session = await authHandlers.auth(req);\n\n // Add auth object to request\n req.auth = {\n session: session,\n user: session?.user || null,\n isAuthenticated: !!session?.user,\n\n // Helper methods\n getSession: async () => session,\n getUser: () => session?.user || null,\n\n // Sign in/out helpers (redirect to auth routes)\n signIn: (provider?: string, options?: any) => {\n const params = new URLSearchParams();\n if (provider) params.set('provider', provider);\n if (options?.callbackUrl) params.set('callbackUrl', options.callbackUrl);\n\n const signInUrl = `${basePath}/signin${provider ? `/${provider}` : ''}${\n params.toString() ? `?${params.toString()}` : ''\n }`;\n\n return { url: signInUrl };\n },\n\n signOut: (options?: any) => {\n const params = new URLSearchParams();\n if (options?.callbackUrl) params.set('callbackUrl', options.callbackUrl);\n\n const signOutUrl = `${basePath}/signout${\n params.toString() ? `?${params.toString()}` : ''\n }`;\n\n return { url: signOutUrl };\n },\n };\n logger.debug('Native adapter hook completed successfully', 'AuthAdapter');\n } catch (error) {\n logger.error('Error in native adapter hook', 'AuthAdapter', {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n });\n\n logger.info('Better Auth middleware installed successfully!', 'AuthAdapter');\n };\n}\n\n// Types are already exported above, no need to re-export\n\n/**\n * Default export for convenience\n */\nexport default MoroJSAuth;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/core/config/config-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/core/config/config-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Configuration Manager - Immutable Single Source of Truth\n *\n * This module provides centralized, immutable configuration state management.\n * Configuration is locked at createApp() initialization and cannot be changed afterward.\n *\n * Precedence: Environment Variables > createApp Options > Config File > Defaults\n */\n\nimport { AppConfig } from '../../types/config.js';\nimport { createFrameworkLogger } from '../logger/index.js';\n\nconst logger = createFrameworkLogger('ConfigManager');\n\n/**\n * Global configuration state - immutable after initialization\n */\nlet globalConfig: Readonly<AppConfig> | null = null;\nlet isLocked = false;\n\n/**\n * Initialize and lock global configuration state\n * This should only be called once during createApp() initialization\n */\nexport function initializeAndLockConfig(config: AppConfig): void {\n if (isLocked) {\n throw new Error(\n 'Configuration is already locked and cannot be changed. ' +\n 'Configuration can only be set once during createApp() initialization.'\n );\n }\n\n // Deep freeze the configuration to make it truly immutable\n globalConfig = deepFreeze(config);\n isLocked = true;\n\n logger.info(\n `Configuration locked and initialized: ${process.env.NODE_ENV || 'development'}:${config.server.port}`\n );\n}\n\n/**\n * Get the current global configuration\n * Throws if configuration hasn't been initialized\n */\nexport function getGlobalConfig(): Readonly<AppConfig> {\n if (!globalConfig || !isLocked) {\n throw new Error(\n 'Configuration not initialized. Call createApp() to initialize the configuration system.'\n );\n }\n return globalConfig;\n}\n\n/**\n * Check if configuration has been initialized and locked\n */\nexport function isConfigLocked(): boolean {\n return isLocked && globalConfig !== null;\n}\n\n/**\n * Reset configuration state (for testing only)\n * @internal - This should only be used in tests\n */\nexport function resetConfigForTesting(): void {\n if (\n process.env.NODE_ENV !== 'test' &&\n !process.env.MORO_ALLOW_CONFIG_RESET &&\n !process.env.JEST_WORKER_ID\n ) {\n throw new Error(\n 'Configuration reset is only allowed in test environments. ' +\n 'Set MORO_ALLOW_CONFIG_RESET=true to override this check.'\n );\n }\n\n globalConfig = null;\n isLocked = false;\n logger.debug('Configuration state reset for testing');\n}\n\n/**\n * Deep freeze an object to make it truly immutable\n * This prevents any accidental mutations to the configuration\n */\nfunction deepFreeze<T>(obj: T): Readonly<T> {\n // Get property names\n const propNames = Object.getOwnPropertyNames(obj);\n\n // Freeze properties before freezing self\n for (const name of propNames) {\n const value = (obj as any)[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n\n return Object.freeze(obj);\n}\n\n/**\n * Get a specific configuration value using dot notation\n * This provides a safe way to access nested config values\n *\n * @example\n * getConfigValue('server.port') // Returns the server port\n * getConfigValue('database.redis.url') // Returns the Redis URL\n */\nexport function getConfigValue<T = any>(path: string): T | undefined {\n const config = getGlobalConfig();\n\n return path.split('.').reduce((obj: any, key: string) => {\n return obj && obj[key] !== undefined ? obj[key] : undefined;\n }, config);\n}\n\n/**\n * Utility functions for common environment checks\n * These now read NODE_ENV directly for consistency with Node.js ecosystem\n */\nexport function isDevelopment(): boolean {\n return process.env.NODE_ENV === 'development';\n}\n\nexport function isProduction(): boolean {\n return process.env.NODE_ENV === 'production';\n}\n\nexport function isStaging(): boolean {\n return process.env.NODE_ENV === 'staging';\n}\n"]}