@morojs/moro 1.8.0 → 1.8.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 (356) hide show
  1. package/README.md +29 -38
  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 +8 -49
  6. package/dist/core/config/config-sources.js.map +1 -1
  7. package/dist/core/config/config-validator.js +2 -3
  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 +4 -1
  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 +2 -2
  44. package/dist/core/framework.js +21 -14
  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 +0 -13
  66. package/dist/core/http/http-server.js +34 -141
  67. package/dist/core/http/http-server.js.map +1 -1
  68. package/dist/core/http/http2-server.js +27 -5
  69. package/dist/core/http/http2-server.js.map +1 -1
  70. package/dist/core/http/index.js.map +1 -1
  71. package/dist/core/http/moro-engine-server.d.ts +2 -2
  72. package/dist/core/http/moro-engine-server.js +48 -22
  73. package/dist/core/http/moro-engine-server.js.map +1 -1
  74. package/dist/core/http/utils/compression.js +3 -3
  75. package/dist/core/http/utils/compression.js.map +1 -1
  76. package/dist/core/http/utils/lazy-event-emitter.js.map +1 -1
  77. package/dist/core/http/utils/multipart-parser.js +7 -3
  78. package/dist/core/http/utils/multipart-parser.js.map +1 -1
  79. package/dist/core/http/utils/query-parser.js.map +1 -1
  80. package/dist/core/http/utils/size.js +2 -2
  81. package/dist/core/http/utils/size.js.map +1 -1
  82. package/dist/core/http/utils/ssl-config.d.ts +10 -10
  83. package/dist/core/http/utils/ssl-config.js.map +1 -1
  84. package/dist/core/http/utils/uws-worker-clustering.js +37 -30
  85. package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
  86. package/dist/core/http/uws-http-server.d.ts +1 -0
  87. package/dist/core/http/uws-http-server.js +80 -22
  88. package/dist/core/http/uws-http-server.js.map +1 -1
  89. package/dist/core/jobs/cron-parser.js +7 -5
  90. package/dist/core/jobs/cron-parser.js.map +1 -1
  91. package/dist/core/jobs/index.js.map +1 -1
  92. package/dist/core/jobs/job-executor.d.ts +1 -1
  93. package/dist/core/jobs/job-executor.js.map +1 -1
  94. package/dist/core/jobs/job-scheduler.d.ts +3 -3
  95. package/dist/core/jobs/job-scheduler.js.map +1 -1
  96. package/dist/core/jobs/job-state-manager.d.ts +3 -3
  97. package/dist/core/jobs/job-state-manager.js +25 -4
  98. package/dist/core/jobs/job-state-manager.js.map +1 -1
  99. package/dist/core/jobs/leader-election.d.ts +15 -0
  100. package/dist/core/jobs/leader-election.js +158 -69
  101. package/dist/core/jobs/leader-election.js.map +1 -1
  102. package/dist/core/jobs/types.d.ts +4 -4
  103. package/dist/core/jobs/types.js.map +1 -1
  104. package/dist/core/jobs/utils.d.ts +1 -1
  105. package/dist/core/jobs/utils.js +7 -3
  106. package/dist/core/jobs/utils.js.map +1 -1
  107. package/dist/core/logger/filters.js +3 -2
  108. package/dist/core/logger/filters.js.map +1 -1
  109. package/dist/core/logger/index.js.map +1 -1
  110. package/dist/core/logger/logger.js +56 -25
  111. package/dist/core/logger/logger.js.map +1 -1
  112. package/dist/core/logger/outputs.js.map +1 -1
  113. package/dist/core/mail/adapters/console-adapter.js.map +1 -1
  114. package/dist/core/mail/adapters/index.js.map +1 -1
  115. package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -1
  116. package/dist/core/mail/adapters/resend-adapter.js.map +1 -1
  117. package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -1
  118. package/dist/core/mail/adapters/ses-adapter.js.map +1 -1
  119. package/dist/core/mail/index.js.map +1 -1
  120. package/dist/core/mail/mail-adapter.js.map +1 -1
  121. package/dist/core/mail/mail-manager.d.ts +10 -0
  122. package/dist/core/mail/mail-manager.js +21 -5
  123. package/dist/core/mail/mail-manager.js.map +1 -1
  124. package/dist/core/mail/template-engine.js.map +1 -1
  125. package/dist/core/mail/types.js.map +1 -1
  126. package/dist/core/middleware/built-in/auth/core.js +3 -3
  127. package/dist/core/middleware/built-in/auth/core.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth/helpers.js +4 -4
  129. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
  130. package/dist/core/middleware/built-in/auth/hook.js.map +1 -1
  131. package/dist/core/middleware/built-in/auth/index.js.map +1 -1
  132. package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +4 -4
  133. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
  134. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -1
  135. package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
  136. package/dist/core/middleware/built-in/body-parsers/index.js.map +1 -1
  137. package/dist/core/middleware/built-in/body-size/core.js +2 -2
  138. package/dist/core/middleware/built-in/body-size/core.js.map +1 -1
  139. package/dist/core/middleware/built-in/body-size/hook.js.map +1 -1
  140. package/dist/core/middleware/built-in/body-size/index.js.map +1 -1
  141. package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -1
  142. package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -1
  143. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
  144. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -1
  145. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
  146. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
  147. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -1
  148. package/dist/core/middleware/built-in/cache/core.js.map +1 -1
  149. package/dist/core/middleware/built-in/cache/hook.js +3 -3
  150. package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
  151. package/dist/core/middleware/built-in/cache/index.js.map +1 -1
  152. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -1
  153. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
  154. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
  155. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
  156. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -1
  157. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -1
  158. package/dist/core/middleware/built-in/cdn/core.js.map +1 -1
  159. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -1
  160. package/dist/core/middleware/built-in/cdn/index.js.map +1 -1
  161. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -1
  162. package/dist/core/middleware/built-in/compression/core.js.map +1 -1
  163. package/dist/core/middleware/built-in/compression/hook.js.map +1 -1
  164. package/dist/core/middleware/built-in/compression/index.js.map +1 -1
  165. package/dist/core/middleware/built-in/compression/middleware.js.map +1 -1
  166. package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
  167. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
  168. package/dist/core/middleware/built-in/cookie/index.js.map +1 -1
  169. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -1
  170. package/dist/core/middleware/built-in/cors/core.js.map +1 -1
  171. package/dist/core/middleware/built-in/cors/hook.js.map +1 -1
  172. package/dist/core/middleware/built-in/cors/index.js.map +1 -1
  173. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -1
  174. package/dist/core/middleware/built-in/csp/core.js.map +1 -1
  175. package/dist/core/middleware/built-in/csp/hook.js.map +1 -1
  176. package/dist/core/middleware/built-in/csp/index.js.map +1 -1
  177. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -1
  178. package/dist/core/middleware/built-in/csrf/core.js +1 -1
  179. package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
  180. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -1
  181. package/dist/core/middleware/built-in/csrf/index.js.map +1 -1
  182. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -1
  183. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -1
  184. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -1
  185. package/dist/core/middleware/built-in/graphql/core.js.map +1 -1
  186. package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -1
  187. package/dist/core/middleware/built-in/graphql/hook.js.map +1 -1
  188. package/dist/core/middleware/built-in/graphql/index.js.map +1 -1
  189. package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -1
  190. package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -1
  191. package/dist/core/middleware/built-in/helmet/core.js.map +1 -1
  192. package/dist/core/middleware/built-in/helmet/hook.js.map +1 -1
  193. package/dist/core/middleware/built-in/helmet/index.js.map +1 -1
  194. package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -1
  195. package/dist/core/middleware/built-in/http2/core.js.map +1 -1
  196. package/dist/core/middleware/built-in/http2/hook.js.map +1 -1
  197. package/dist/core/middleware/built-in/http2/index.js.map +1 -1
  198. package/dist/core/middleware/built-in/http2/middleware.js.map +1 -1
  199. package/dist/core/middleware/built-in/index.js.map +1 -1
  200. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -1
  201. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -1
  202. package/dist/core/middleware/built-in/range/core.js +4 -1
  203. package/dist/core/middleware/built-in/range/core.js.map +1 -1
  204. package/dist/core/middleware/built-in/range/hook.js.map +1 -1
  205. package/dist/core/middleware/built-in/range/index.js.map +1 -1
  206. package/dist/core/middleware/built-in/range/middleware.js.map +1 -1
  207. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
  208. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -1
  209. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -1
  210. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -1
  211. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -1
  212. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -1
  213. package/dist/core/middleware/built-in/session/core.js +4 -4
  214. package/dist/core/middleware/built-in/session/core.js.map +1 -1
  215. package/dist/core/middleware/built-in/session/hook.js.map +1 -1
  216. package/dist/core/middleware/built-in/session/index.js.map +1 -1
  217. package/dist/core/middleware/built-in/session/middleware.js.map +1 -1
  218. package/dist/core/middleware/built-in/sse/core.js.map +1 -1
  219. package/dist/core/middleware/built-in/sse/hook.js.map +1 -1
  220. package/dist/core/middleware/built-in/sse/index.js.map +1 -1
  221. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -1
  222. package/dist/core/middleware/built-in/static/core.js.map +1 -1
  223. package/dist/core/middleware/built-in/static/hook.js.map +1 -1
  224. package/dist/core/middleware/built-in/static/index.js.map +1 -1
  225. package/dist/core/middleware/built-in/static/middleware.js.map +1 -1
  226. package/dist/core/middleware/built-in/template/core.js +1 -1
  227. package/dist/core/middleware/built-in/template/core.js.map +1 -1
  228. package/dist/core/middleware/built-in/template/hook.js.map +1 -1
  229. package/dist/core/middleware/built-in/template/index.js.map +1 -1
  230. package/dist/core/middleware/built-in/template/middleware.js.map +1 -1
  231. package/dist/core/middleware/built-in/upload/core.js.map +1 -1
  232. package/dist/core/middleware/built-in/upload/hook.js.map +1 -1
  233. package/dist/core/middleware/built-in/upload/index.js.map +1 -1
  234. package/dist/core/middleware/built-in/upload/middleware.js.map +1 -1
  235. package/dist/core/middleware/built-in/validation/core.js.map +1 -1
  236. package/dist/core/middleware/built-in/validation/hook.js.map +1 -1
  237. package/dist/core/middleware/built-in/validation/index.js.map +1 -1
  238. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
  239. package/dist/core/middleware/index.js +2 -2
  240. package/dist/core/middleware/index.js.map +1 -1
  241. package/dist/core/modules/auto-discovery.js +11 -7
  242. package/dist/core/modules/auto-discovery.js.map +1 -1
  243. package/dist/core/modules/index.js.map +1 -1
  244. package/dist/core/modules/modules.js +18 -13
  245. package/dist/core/modules/modules.js.map +1 -1
  246. package/dist/core/networking/adapters/engine-adapter.js +30 -2
  247. package/dist/core/networking/adapters/engine-adapter.js.map +1 -1
  248. package/dist/core/networking/adapters/index.js.map +1 -1
  249. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -0
  250. package/dist/core/networking/adapters/socketio-adapter.js +12 -1
  251. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  252. package/dist/core/networking/adapters/uws-adapter.js +1 -1
  253. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  254. package/dist/core/networking/adapters/ws-adapter.d.ts +15 -0
  255. package/dist/core/networking/adapters/ws-adapter.js +120 -6
  256. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  257. package/dist/core/networking/index.js.map +1 -1
  258. package/dist/core/networking/service-discovery.js +7 -5
  259. package/dist/core/networking/service-discovery.js.map +1 -1
  260. package/dist/core/networking/websocket-adapter.d.ts +22 -3
  261. package/dist/core/networking/websocket-adapter.js.map +1 -1
  262. package/dist/core/networking/websocket-manager.js +70 -67
  263. package/dist/core/networking/websocket-manager.js.map +1 -1
  264. package/dist/core/pooling/object-pool-manager.js +6 -0
  265. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  266. package/dist/core/queue/adapters/bull-adapter.js.map +1 -1
  267. package/dist/core/queue/adapters/index.js.map +1 -1
  268. package/dist/core/queue/adapters/kafka-adapter.js +2 -2
  269. package/dist/core/queue/adapters/kafka-adapter.js.map +1 -1
  270. package/dist/core/queue/adapters/memory-adapter.js +6 -6
  271. package/dist/core/queue/adapters/memory-adapter.js.map +1 -1
  272. package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +50 -0
  273. package/dist/core/queue/adapters/rabbitmq-adapter.js +176 -20
  274. package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -1
  275. package/dist/core/queue/adapters/sqs-adapter.d.ts +12 -2
  276. package/dist/core/queue/adapters/sqs-adapter.js +75 -24
  277. package/dist/core/queue/adapters/sqs-adapter.js.map +1 -1
  278. package/dist/core/queue/index.js.map +1 -1
  279. package/dist/core/queue/middleware/index.js.map +1 -1
  280. package/dist/core/queue/middleware/monitoring.d.ts +1 -1
  281. package/dist/core/queue/middleware/monitoring.js.map +1 -1
  282. package/dist/core/queue/middleware/priority.js +2 -1
  283. package/dist/core/queue/middleware/priority.js.map +1 -1
  284. package/dist/core/queue/middleware/rate-limit.js.map +1 -1
  285. package/dist/core/queue/queue-adapter.js.map +1 -1
  286. package/dist/core/queue/queue-manager.js.map +1 -1
  287. package/dist/core/queue/types.d.ts +8 -8
  288. package/dist/core/queue/types.js.map +1 -1
  289. package/dist/core/routing/app-integration.js.map +1 -1
  290. package/dist/core/routing/create-router.js.map +1 -1
  291. package/dist/core/routing/index.js.map +1 -1
  292. package/dist/core/routing/path-matcher.js.map +1 -1
  293. package/dist/core/routing/radix-tree.js.map +1 -1
  294. package/dist/core/routing/router.js.map +1 -1
  295. package/dist/core/routing/unified-router.js +12 -4
  296. package/dist/core/routing/unified-router.js.map +1 -1
  297. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  298. package/dist/core/runtime/base-adapter.js +2 -2
  299. package/dist/core/runtime/base-adapter.js.map +1 -1
  300. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -0
  301. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  302. package/dist/core/runtime/index.js.map +1 -1
  303. package/dist/core/runtime/node-adapter.js +19 -17
  304. package/dist/core/runtime/node-adapter.js.map +1 -1
  305. package/dist/core/runtime/vercel-edge-adapter.js +2 -0
  306. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  307. package/dist/core/utilities/circuit-breaker.d.ts +1 -0
  308. package/dist/core/utilities/circuit-breaker.js +25 -2
  309. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  310. package/dist/core/utilities/container.js +9 -9
  311. package/dist/core/utilities/container.js.map +1 -1
  312. package/dist/core/utilities/hooks.js +28 -6
  313. package/dist/core/utilities/hooks.js.map +1 -1
  314. package/dist/core/utilities/index.js.map +1 -1
  315. package/dist/core/utilities/module-path.js.map +1 -1
  316. package/dist/core/utilities/package-utils.js +1 -1
  317. package/dist/core/utilities/package-utils.js.map +1 -1
  318. package/dist/core/utilities/response-helpers.js +1 -1
  319. package/dist/core/utilities/response-helpers.js.map +1 -1
  320. package/dist/core/validation/adapters.js.map +1 -1
  321. package/dist/core/validation/error-handler.js.map +1 -1
  322. package/dist/core/validation/index.js.map +1 -1
  323. package/dist/core/validation/schema-interface.js.map +1 -1
  324. package/dist/core/workers/facade.js.map +1 -1
  325. package/dist/core/workers/index.js.map +1 -1
  326. package/dist/core/workers/worker-entry.d.ts +1 -0
  327. package/dist/core/workers/worker-entry.js +12 -0
  328. package/dist/core/workers/worker-entry.js.map +1 -0
  329. package/dist/core/workers/worker-manager.d.ts +23 -2
  330. package/dist/core/workers/worker-manager.js +117 -17
  331. package/dist/core/workers/worker-manager.js.map +1 -1
  332. package/dist/core/workers/worker.js +8 -6
  333. package/dist/core/workers/worker.js.map +1 -1
  334. package/dist/index.d.ts +1 -1
  335. package/dist/index.js +4 -1
  336. package/dist/index.js.map +1 -1
  337. package/dist/moro.d.ts +18 -1
  338. package/dist/moro.js +168 -50
  339. package/dist/moro.js.map +1 -1
  340. package/dist/types/auth.d.ts +4 -4
  341. package/dist/types/auth.js.map +1 -1
  342. package/dist/types/cache.js.map +1 -1
  343. package/dist/types/cdn.js.map +1 -1
  344. package/dist/types/config.d.ts +10 -10
  345. package/dist/types/config.js.map +1 -1
  346. package/dist/types/core.js.map +1 -1
  347. package/dist/types/database.js.map +1 -1
  348. package/dist/types/discovery.js.map +1 -1
  349. package/dist/types/events.js.map +1 -1
  350. package/dist/types/hooks.js.map +1 -1
  351. package/dist/types/http.js.map +1 -1
  352. package/dist/types/logger.js.map +1 -1
  353. package/dist/types/module.js.map +1 -1
  354. package/dist/types/runtime.js.map +1 -1
  355. package/dist/types/session.js.map +1 -1
  356. package/package.json +29 -17
@@ -1 +1 @@
1
- {"version":3,"file":"multipart-parser.js","sourceRoot":"","sources":["../../../../src/core/http/utils/multipart-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multipart-parser.js","sourceRoot":"","sources":["../../../../src/core/http/utils/multipart-parser.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,+BAA+B;AAC/B,EAAE;AACF,+DAA+D;AAC/D,oEAAoE;AACpE,8BAA8B;AAC9B,yEAAyE;AACzE,oDAAoD;AACpD,wEAAwE;AACxE,2EAA2E;AAC3E,iEAAiE;AACjE,yEAAyE;AACzE,kDAAkD;AA0BlD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,6BAA6B,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD;wEACwE;AACxE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,UAAU,GAAG,GAAG,CAAC;IACjB,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAErC;;;GAGG;AACH,SAAS,eAAe,CAAC,WAAmB;IAC1C,MAAM,KAAK,GAAG,2CAA2C,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC,EAAE,CAAC,CAAC,WAAW;QAChB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAAE,CAAC,EAAE,CAAC;QACxE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,MAAM;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAAE,CAAC,EAAE,CAAC;QACxE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,CAAC,EAAE,CAAC;YACJ,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM;oBAAE,CAAC,EAAE,CAAC,CAAC,cAAc;gBAClE,CAAC,EAAE,CAAC;YACN,CAAC;YACD,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACjE,CAAC,GAAG,GAAG,CAAC;QACV,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAC9D,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CACvC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,WAAmB,EACnB,MAAwB;IAExB,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,cAAc,GAAG,MAAM,EAAE,kBAAkB,IAAI,6BAA6B,CAAC;IACnF,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,eAAe;IACvD,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,eAAe;IAC7D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAE3B,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,MAAM,GAA8B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,KAAK,GAA6B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IAEnD,uEAAuE;IACvE,oEAAoE;IACpE,IAAI,GAAW,CAAC;IAChB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACjE,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3C,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,SAAS,CAAC;QACR,wEAAwE;QACxE,8CAA8C;QAC9C,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI;YAAE,MAAM;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,MAAM;QAC1B,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnD,IAAI,EAAE,SAAS,GAAG,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,QAAQ,QAAQ,CAAC,CAAC;QAC/E,CAAC;QACD,uEAAuE;QACvE,oDAAoD;QACpD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;YAC5E,QAAQ;YACR,WAAW;YACX,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,IAAI,KAAK,CAAC,CAAC;YAAE,MAAM;QACvB,GAAG,GAAG,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS,CAChB,IAAY,EACZ,MAAiC,EACjC,KAA+B,EAC/B,cAAsB,EACtB,UAA+E;IAE/E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,GAAG,cAAc;QAAE,OAAO;IAEjE,sDAAsD;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnE,kDAAkD;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEtE,IAAI,WAA+B,CAAC;IACpC,IAAI,eAAmC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,UAAU,KAAK,qBAAqB,EAAE,CAAC;YACzC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC;aAAM,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YACzC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,MAAM,MAAM,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,iEAAiE;IACjE,6CAA6C;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,sEAAsE;IACtE,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QAC9C,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;QACxD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,QAAQ,GAAG,gBAAgB,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE5D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YACtE,MAAM,IAAI,mBAAmB,CAC3B,kBAAkB,QAAQ,aAAa,UAAU,CAAC,WAAW,QAAQ,CACtE,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1E,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,UAAU,CAAC,QAAQ,QAAQ,CAAC,CAAC;QAC1F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG;YACZ,QAAQ;YACR,QAAQ,EAAE,eAAe,IAAI,0BAA0B;YACvD,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC","sourcesContent":["// Shared multipart/form-data parser used by both the Node http server and the\n// native engine server, so uploads behave identically on either transport.\n// Operates on Buffers throughout - converting the payload to a string would\n// corrupt binary file content.\n//\n// RFC 7578 (multipart/form-data) over RFC 2046 §5.1.1 framing:\n// - boundary parameter may be quoted and may be followed by other\n// Content-Type parameters\n// - parts are delimited by CRLF \"--\" boundary; the first delimiter may\n// appear without the leading CRLF (no preamble)\n// - Content-Disposition parameters are parsed with real quoted-string\n// handling (a `filename` containing `name=` must not corrupt the field\n// name) and RFC 5987 `filename*` extended values are honored\n// - part/header counts are capped so a crafted body cannot amplify one\n// bounded upload into millions of allocations\n\nexport interface ParsedMultipart {\n fields: Record<string, string>;\n files: Record<\n string,\n {\n filename: string;\n mimetype: string;\n data: Buffer;\n size: number;\n }\n >;\n}\n\nexport interface MultipartLimits {\n /** Maximum number of parts (fields + files) before parsing aborts */\n maxParts?: number;\n /** Maximum size of one part's header block in bytes */\n maxPartHeaderBytes?: number;\n /** Maximum number of file parts before parsing aborts (0/undefined = no limit) */\n maxFiles?: number;\n /** Maximum size in bytes of a single file part (0/undefined = no limit) */\n maxFileSize?: number;\n}\n\nconst DEFAULT_MAX_PARTS = 1000;\nconst DEFAULT_MAX_PART_HEADER_BYTES = 16 * 1024;\n\n/** Error thrown when a multipart limit is exceeded; carries a 413 statusCode\n * so every server's existing entity-too-large handling picks it up. */\nexport class MultipartLimitError extends Error {\n statusCode = 413;\n constructor(message: string) {\n super(message);\n this.name = 'MultipartLimitError';\n }\n}\n\nconst HEADER_SEPARATOR = Buffer.from('\\r\\n\\r\\n');\nconst CRLF_BUF = Buffer.from('\\r\\n');\n\n/**\n * Extract the boundary parameter from a Content-Type value, honoring quoted\n * boundaries and ignoring any parameters that follow it.\n */\nfunction extractBoundary(contentType: string): string | null {\n const match = /;\\s*boundary\\s*=\\s*(?:\"([^\"]*)\"|([^;]+))/i.exec(contentType);\n if (!match) return null;\n const raw = (match[1] ?? match[2] ?? '').trim();\n return raw || null;\n}\n\n/**\n * Parse the parameters of a Content-Disposition value with quoted-string and\n * quoted-pair handling. Returns a Map (not a plain object) so parameter names\n * like __proto__ cannot interfere with lookups. First occurrence wins.\n */\nfunction parseDispositionParams(value: string): Map<string, string> {\n const params = new Map<string, string>();\n let i = value.indexOf(';');\n while (i !== -1 && i < value.length) {\n i++; // past ';'\n while (i < value.length && (value[i] === ' ' || value[i] === '\\t')) i++;\n const eq = value.indexOf('=', i);\n if (eq === -1) break;\n const key = value.slice(i, eq).trim().toLowerCase();\n let val: string;\n let j = eq + 1;\n while (j < value.length && (value[j] === ' ' || value[j] === '\\t')) j++;\n if (value[j] === '\"') {\n j++;\n const start = j;\n while (j < value.length && value[j] !== '\"') {\n if (value[j] === '\\\\' && j + 1 < value.length) j++; // quoted-pair\n j++;\n }\n val = value.slice(start, j).replace(/\\\\(.)/g, '$1');\n i = value.indexOf(';', j + 1);\n } else {\n const end = value.indexOf(';', j);\n val = (end === -1 ? value.slice(j) : value.slice(j, end)).trim();\n i = end;\n }\n if (key && !params.has(key)) params.set(key, val);\n }\n return params;\n}\n\n/** Decode an RFC 5987 extended value (charset'lang'percent-encoded). */\nfunction decodeExtendedValue(value: string): string | null {\n const match = /^(utf-8|iso-8859-1)'[^']*'(.+)$/i.exec(value);\n if (!match) return null;\n const charset = match[1];\n const encoded = match[2];\n if (charset === undefined || encoded === undefined) return null;\n try {\n if (charset.toLowerCase() === 'utf-8') {\n return decodeURIComponent(encoded);\n }\n return encoded.replace(/%([0-9a-fA-F]{2})/g, (_, hex: string) =>\n String.fromCharCode(parseInt(hex, 16))\n );\n } catch {\n return null;\n }\n}\n\n/**\n * Parse a buffered multipart/form-data payload into fields and files.\n * Duplicate part names are last-wins (matching URLSearchParams-style access).\n * @throws Error when the content type carries no boundary or the part count\n * exceeds the limit\n */\nexport function parseMultipart(\n buffer: Buffer,\n contentType: string,\n limits?: MultipartLimits\n): ParsedMultipart {\n const boundary = extractBoundary(contentType);\n if (!boundary) {\n throw new Error('Invalid multipart boundary');\n }\n const maxParts = limits?.maxParts ?? DEFAULT_MAX_PARTS;\n const maxHeaderBytes = limits?.maxPartHeaderBytes ?? DEFAULT_MAX_PART_HEADER_BYTES;\n const maxFiles = limits?.maxFiles ?? 0; // 0 = no limit\n const maxFileSize = limits?.maxFileSize ?? 0; // 0 = no limit\n const fileCount = { n: 0 };\n\n // Null-prototype objects: a part named \"__proto__\" is stored as a plain own\n // key instead of silently vanishing into the prototype setter.\n const fields: ParsedMultipart['fields'] = Object.create(null);\n const files: ParsedMultipart['files'] = Object.create(null);\n\n const dashBoundary = Buffer.from(`--${boundary}`);\n const delimiter = Buffer.from(`\\r\\n--${boundary}`);\n\n // Locate the first delimiter: at the very start it appears without the\n // leading CRLF; otherwise a preamble precedes it (RFC 2046 §5.1.1).\n let pos: number;\n if (buffer.subarray(0, dashBoundary.length).equals(dashBoundary)) {\n pos = dashBoundary.length;\n } else {\n const first = buffer.indexOf(delimiter);\n if (first === -1) return { fields, files };\n pos = first + delimiter.length;\n }\n\n let partCount = 0;\n for (;;) {\n // After the boundary token: \"--\" marks the closing delimiter; otherwise\n // optional padding then CRLF starts the part.\n if (buffer[pos] === 0x2d && buffer[pos + 1] === 0x2d) break;\n const lineEnd = buffer.indexOf(CRLF_BUF, pos);\n if (lineEnd === -1) break;\n const partStart = lineEnd + 2;\n const next = buffer.indexOf(delimiter, partStart);\n const partEnd = next === -1 ? buffer.length : next;\n\n if (++partCount > maxParts) {\n throw new MultipartLimitError(`Multipart payload exceeds ${maxParts} parts`);\n }\n // The delimiter includes the part's trailing CRLF, so the slice is the\n // exact content - no trailing-byte trimming needed.\n parsePart(buffer.subarray(partStart, partEnd), fields, files, maxHeaderBytes, {\n maxFiles,\n maxFileSize,\n fileCount,\n });\n\n if (next === -1) break;\n pos = next + delimiter.length;\n }\n\n return { fields, files };\n}\n\nfunction parsePart(\n part: Buffer,\n fields: ParsedMultipart['fields'],\n files: ParsedMultipart['files'],\n maxHeaderBytes: number,\n fileLimits: { maxFiles: number; maxFileSize: number; fileCount: { n: number } }\n): void {\n const headerEndPos = part.indexOf(HEADER_SEPARATOR);\n if (headerEndPos === -1 || headerEndPos > maxHeaderBytes) return;\n\n // Headers are always text - safe to convert to string\n const headerText = part.subarray(0, headerEndPos).toString('utf8');\n // Content stays as Buffer to preserve binary data\n const content = part.subarray(headerEndPos + HEADER_SEPARATOR.length);\n\n let disposition: string | undefined;\n let partContentType: string | undefined;\n for (const line of headerText.split('\\r\\n')) {\n const colon = line.indexOf(':');\n if (colon === -1) continue;\n const headerName = line.slice(0, colon).trim().toLowerCase();\n if (headerName === 'content-disposition') {\n disposition = line.slice(colon + 1).trim();\n } else if (headerName === 'content-type') {\n partContentType = line.slice(colon + 1).trim();\n }\n }\n if (!disposition) return;\n\n const params = parseDispositionParams(disposition);\n const name = params.get('name');\n // A part without a name cannot be keyed - never fall back to the\n // (attacker-controlled) filename as the key.\n if (!name) return;\n\n // filename* (RFC 5987) takes precedence over filename (RFC 6266 §4.3)\n const extendedFilename = params.has('filename*')\n ? decodeExtendedValue(params.get('filename*') as string)\n : null;\n const filename = extendedFilename ?? params.get('filename');\n\n if (filename !== undefined && filename !== null) {\n if (fileLimits.maxFileSize && content.length > fileLimits.maxFileSize) {\n throw new MultipartLimitError(\n `Uploaded file '${filename}' exceeds ${fileLimits.maxFileSize} bytes`\n );\n }\n if (fileLimits.maxFiles && ++fileLimits.fileCount.n > fileLimits.maxFiles) {\n throw new MultipartLimitError(`Multipart payload exceeds ${fileLimits.maxFiles} files`);\n }\n files[name] = {\n filename,\n mimetype: partContentType || 'application/octet-stream',\n data: content,\n size: content.length,\n };\n } else {\n fields[name] = content.toString('utf8');\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"query-parser.js","sourceRoot":"","sources":["../../../../src/core/http/utils/query-parser.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,+DAA+D;AAC/D,gDAAgD;AAChD,mEAAmE;AACnE,4DAA4D;AAC5D,mCAAmC;AACnC,0EAA0E;AAC1E,iEAAiE;AAEjE,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9F,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,MAAM,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,CACjE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAC1B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"query-parser.js","sourceRoot":"","sources":["../../../../src/core/http/utils/query-parser.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,+DAA+D;AAC/D,gDAAgD;AAChD,mEAAmE;AACnE,4DAA4D;AAC5D,mCAAmC;AACnC,0EAA0E;AAC1E,iEAAiE;AAEjE,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9F,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,MAAM,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,CACjE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAC1B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Parse a raw query string (\"a=1&b=2\") into an object. Transport-neutral: the\n// single canonical implementation for the Node http server, the uWS adapter,\n// and the Moro engine adapter, so req.query is identical on every transport.\n//\n// Semantics follow application/x-www-form-urlencoded (WHATWG):\n// - '+' decodes to a space in keys and values\n// - malformed percent-escapes never throw (the raw text is kept)\n// - a key without '=' yields '' (\"?flag\" -> { flag: '' })\n// - duplicate keys are last-wins\n// The result has a null prototype (like node:querystring), so a key named\n// \"__proto__\" is stored as an own property instead of vanishing.\n\nfunction decodeComponent(component: string): string {\n const plusDecoded = component.indexOf('+') === -1 ? component : component.replace(/\\+/g, ' ');\n if (plusDecoded.indexOf('%') === -1) return plusDecoded;\n try {\n return decodeURIComponent(plusDecoded);\n } catch {\n return plusDecoded;\n }\n}\n\nexport function parseRawQueryString(queryString: string): Record<string, string> {\n const result: Record<string, string> = Object.create(null);\n if (!queryString) return result;\n if (queryString[0] === '?') queryString = queryString.substring(1);\n const pairs = queryString.split('&');\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (!pair) continue;\n const eqIdx = pair.indexOf('=');\n if (eqIdx === -1) {\n result[decodeComponent(pair)] = '';\n } else {\n result[decodeComponent(pair.substring(0, eqIdx))] = decodeComponent(\n pair.substring(eqIdx + 1)\n );\n }\n }\n return result;\n}\n"]}
@@ -22,9 +22,9 @@ export function parseSizeToBytes(size, fallback = 10 * 1024 * 1024) {
22
22
  const match = size.toLowerCase().match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/);
23
23
  if (!match)
24
24
  return fallback;
25
- const value = parseFloat(match[1]);
25
+ const value = parseFloat(match[1] ?? '');
26
26
  const unit = match[2] || 'b';
27
- return Math.round(value * UNITS[unit]);
27
+ return Math.round(value * (UNITS[unit] ?? 1));
28
28
  }
29
29
  /** True when `size` is a number, or a string parseable by parseSizeToBytes. */
30
30
  export function isValidSize(size) {
@@ -1 +1 @@
1
- {"version":3,"file":"size.js","sourceRoot":"","sources":["../../../../src/core/http/utils/size.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,KAAK,GAA8B;IACvC,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI,GAAG,IAAI;IACf,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;CACvB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,IAAqB,EACrB,WAAmB,EAAE,GAAG,IAAI,GAAG,IAAI;IAEnC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC5E,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE5B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAiCD,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IACxE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"size.js","sourceRoot":"","sources":["../../../../src/core/http/utils/size.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,KAAK,GAA8B;IACvC,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI,GAAG,IAAI;IACf,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;CACvB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,IAAqB,EACrB,WAAmB,EAAE,GAAG,IAAI,GAAG,IAAI;IAEnC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC5E,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE5B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAiCD,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IACxE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC","sourcesContent":["/**\n * Parse a human size string (\"10mb\", \"5gb\", \"16kb\") or a raw number of bytes\n * into bytes. Shared by config validation, the runtime-limits builder, and\n * every HTTP server so `bodySizeLimit: '10mb'` means the same thing\n * everywhere.\n *\n * A number passes through unchanged. An unparseable string falls back to\n * `fallback` (10 MB by default) so a typo degrades to a safe default rather\n * than 0/NaN.\n */\nconst UNITS: { [key: string]: number } = {\n b: 1,\n kb: 1024,\n mb: 1024 * 1024,\n gb: 1024 * 1024 * 1024,\n};\n\nexport function parseSizeToBytes(\n size: string | number,\n fallback: number = 10 * 1024 * 1024\n): number {\n if (typeof size === 'number') return size;\n if (typeof size !== 'string') return fallback;\n\n const match = size.toLowerCase().match(/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb)?$/);\n if (!match) return fallback;\n\n const value = parseFloat(match[1] ?? '');\n const unit = match[2] || 'b';\n return Math.round(value * (UNITS[unit] ?? 1));\n}\n\n/**\n * Flattened, size-resolved runtime limits passed from the framework to every\n * HTTP server. undefined = use that server's own documented default. Mirrors\n * the RuntimeLimits built in framework.ts (kept here so the servers can import\n * it without depending on framework.ts).\n */\nexport interface HttpRuntimeLimits {\n maxBodySize?: number;\n maxUploadSize?: number;\n maxConnections?: number;\n backlog?: number;\n timeouts?: {\n request?: number;\n idle?: number;\n keepAlive?: number;\n headers?: number;\n };\n maxHeaderSize?: number;\n maxHeaders?: number;\n wsMaxMessageSize?: number;\n wsBackpressureLimit?: number;\n writeHighWaterMark?: number;\n maxPendingBytes?: number;\n multipart?: {\n maxParts?: number;\n maxPartHeaderBytes?: number;\n maxFiles?: number;\n maxFileSize?: number;\n };\n}\n\n/** True when `size` is a number, or a string parseable by parseSizeToBytes. */\nexport function isValidSize(size: unknown): boolean {\n if (typeof size === 'number') return Number.isFinite(size) && size >= 0;\n if (typeof size !== 'string') return false;\n return /^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb)?$/i.test(size.trim());\n}\n"]}
@@ -17,16 +17,16 @@ export interface SSLConfigInput {
17
17
  }
18
18
  /** Canonical internal SSL config after normalization. */
19
19
  export interface NormalizedSSLConfig {
20
- keyFile?: string;
21
- certFile?: string;
22
- caFile?: string[];
23
- key?: string | Buffer;
24
- cert?: string | Buffer;
25
- ca?: Array<string | Buffer>;
26
- passphrase?: string;
27
- minVersion?: 'TLSv1.2' | 'TLSv1.3';
28
- requestCert?: boolean;
29
- rejectUnauthorized?: boolean;
20
+ keyFile?: string | undefined;
21
+ certFile?: string | undefined;
22
+ caFile?: string[] | undefined;
23
+ key?: string | Buffer | undefined;
24
+ cert?: string | Buffer | undefined;
25
+ ca?: Array<string | Buffer> | undefined;
26
+ passphrase?: string | undefined;
27
+ minVersion?: 'TLSv1.2' | 'TLSv1.3' | undefined;
28
+ requestCert?: boolean | undefined;
29
+ rejectUnauthorized?: boolean | undefined;
30
30
  }
31
31
  /**
32
32
  * Normalize the two historical SSL shapes into one. `serverSsl`
@@ -1 +1 @@
1
- {"version":3,"file":"ssl-config.js","sourceRoot":"","sources":["../../../../src/core/http/utils/ssl-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssl-config.js","sourceRoot":"","sources":["../../../../src/core/http/utils/ssl-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Unified SSL/TLS configuration.\n *\n * MoroJS historically carried TWO incompatible SSL shapes:\n * - `config.server.ssl` = uWS-style file paths { key_file_name, cert_file_name, passphrase }\n * - `options.https` = node-style buffers { key, cert, ca }\n * and each reached only one runtime (uWS / http2 respectively). This module\n * normalizes both into ONE internal shape and projects it back out for each\n * of the four servers (Node https, uWS SSLApp, HTTP/2, the native engine), so\n * a single `server.ssl` config flows everywhere.\n */\nimport { readFileSync } from 'fs';\nimport type { MoroLogger } from '../../logger/index.js';\n\n/** Raw, un-normalized SSL config as a user may supply it (either shape). */\nexport interface SSLConfigInput {\n // File-path shape (uWS-style; also accepted node-style keyFile/certFile)\n key_file_name?: string;\n cert_file_name?: string;\n ca_file_name?: string | string[];\n keyFile?: string;\n certFile?: string;\n caFile?: string | string[];\n // Inline shape (node-style)\n key?: string | Buffer;\n cert?: string | Buffer;\n ca?: string | Buffer | Array<string | Buffer>;\n passphrase?: string;\n minVersion?: 'TLSv1.2' | 'TLSv1.3';\n requestCert?: boolean;\n rejectUnauthorized?: boolean;\n}\n\n/** Canonical internal SSL config after normalization. */\nexport interface NormalizedSSLConfig {\n keyFile?: string | undefined;\n certFile?: string | undefined;\n caFile?: string[] | undefined;\n key?: string | Buffer | undefined;\n cert?: string | Buffer | undefined;\n ca?: Array<string | Buffer> | undefined;\n passphrase?: string | undefined;\n minVersion?: 'TLSv1.2' | 'TLSv1.3' | undefined;\n requestCert?: boolean | undefined;\n rejectUnauthorized?: boolean | undefined;\n}\n\nconst toArray = <T>(v: T | T[] | undefined): T[] | undefined =>\n v === undefined ? undefined : Array.isArray(v) ? v : [v];\n\n/**\n * Normalize the two historical SSL shapes into one. `serverSsl`\n * (config.server.ssl) wins over `optionsHttps` (options.https) when both are\n * present, matching the pre-existing precedence in framework.ts. Returns null\n * when neither carries any key/cert material (TLS simply off).\n */\nexport function normalizeSSLConfig(\n serverSsl?: SSLConfigInput | null,\n optionsHttps?: SSLConfigInput | null,\n logger?: MoroLogger\n): NormalizedSSLConfig | null {\n if (serverSsl && optionsHttps) {\n logger?.warn('Both server.ssl and options.https are set; server.ssl takes precedence', 'SSL');\n }\n const src = serverSsl ?? optionsHttps;\n if (!src) return null;\n\n const out: NormalizedSSLConfig = {\n keyFile: src.keyFile ?? src.key_file_name,\n certFile: src.certFile ?? src.cert_file_name,\n caFile: toArray(src.caFile ?? src.ca_file_name),\n key: src.key,\n cert: src.cert,\n ca: toArray(src.ca),\n passphrase: src.passphrase,\n minVersion: src.minVersion,\n requestCert: src.requestCert,\n rejectUnauthorized: src.rejectUnauthorized,\n };\n\n const hasKey = Boolean(out.key || out.keyFile);\n const hasCert = Boolean(out.cert || out.certFile);\n if (!hasKey && !hasCert) return null; // nothing usable -> TLS off\n return out;\n}\n\n/** True when the config actually carries a key+cert (complete TLS material). */\nexport function sslIsComplete(ssl: NormalizedSSLConfig): boolean {\n return Boolean((ssl.key || ssl.keyFile) && (ssl.cert || ssl.certFile));\n}\n\n/**\n * Project for the Node http/https and HTTP/2 servers: node's tls API wants\n * key/cert/ca as strings or Buffers, so any file paths are read here.\n */\nexport function sslForNode(ssl: NormalizedSSLConfig): {\n key: string | Buffer;\n cert: string | Buffer;\n ca?: Array<string | Buffer>;\n passphrase?: string;\n minVersion?: string;\n requestCert?: boolean;\n rejectUnauthorized?: boolean;\n} {\n const key = ssl.key ?? (ssl.keyFile ? readFileSync(ssl.keyFile) : undefined);\n const cert = ssl.cert ?? (ssl.certFile ? readFileSync(ssl.certFile) : undefined);\n const ca = ssl.ca ?? (ssl.caFile ? ssl.caFile.map(p => readFileSync(p)) : undefined);\n if (!key || !cert) {\n throw new Error('sslForNode requires both a key and a certificate');\n }\n return {\n key,\n cert,\n ...(ca && { ca }),\n ...(ssl.passphrase && { passphrase: ssl.passphrase }),\n ...(ssl.minVersion && { minVersion: ssl.minVersion }),\n ...(ssl.requestCert !== undefined && { requestCert: ssl.requestCert }),\n ...(ssl.rejectUnauthorized !== undefined && {\n rejectUnauthorized: ssl.rejectUnauthorized,\n }),\n };\n}\n\n/**\n * Project for uWebSockets.js SSLApp, which requires FILE PATHS (it has no\n * inline-PEM option). Returns null when only inline PEM is available so the\n * caller can log a clear error instead of silently booting plain HTTP.\n */\nexport function sslForUws(ssl: NormalizedSSLConfig): {\n key_file_name: string;\n cert_file_name: string;\n ca_file_name?: string;\n passphrase?: string;\n} | null {\n if (!ssl.keyFile || !ssl.certFile) return null;\n return {\n key_file_name: ssl.keyFile,\n cert_file_name: ssl.certFile,\n ...(ssl.caFile && ssl.caFile[0] && { ca_file_name: ssl.caFile[0] }),\n ...(ssl.passphrase && { passphrase: ssl.passphrase }),\n };\n}\n\n/**\n * Project for the native @morojs/engine serve() options.ssl, which accepts\n * BOTH shapes (file paths and inline PEM) and prefers inline. Pass everything\n * through; the engine decides.\n */\nexport function sslForEngine(ssl: NormalizedSSLConfig): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (ssl.keyFile) out.key_file_name = ssl.keyFile;\n if (ssl.certFile) out.cert_file_name = ssl.certFile;\n if (ssl.caFile && ssl.caFile[0]) out.ca_file_name = ssl.caFile[0];\n if (ssl.key) out.key = ssl.key;\n if (ssl.cert) out.cert = ssl.cert;\n if (ssl.ca && ssl.ca[0]) out.ca = ssl.ca[0];\n if (ssl.passphrase) out.passphrase = ssl.passphrase;\n if (ssl.minVersion) out.minVersion = ssl.minVersion;\n if (ssl.requestCert !== undefined) out.requestCert = ssl.requestCert;\n if (ssl.rejectUnauthorized !== undefined) out.rejectUnauthorized = ssl.rejectUnauthorized;\n return out;\n}\n"]}
@@ -97,7 +97,12 @@ export class UWSWorkerClusterManager {
97
97
  }
98
98
  async spawnWorker(index) {
99
99
  return new Promise((resolve, reject) => {
100
- const worker = new Worker(process.argv[1], {
100
+ const scriptPath = process.argv[1];
101
+ if (scriptPath === undefined) {
102
+ reject(new Error('Cannot spawn worker: process.argv[1] (entry script) is unavailable'));
103
+ return;
104
+ }
105
+ const worker = new Worker(scriptPath, {
101
106
  workerData: {
102
107
  isUWSWorker: true,
103
108
  workerIndex: index,
@@ -167,7 +172,7 @@ export class UWSWorkerClusterManager {
167
172
  setTimeout(() => {
168
173
  if (!descriptorReceived) {
169
174
  logger.error(`Worker ${index} failed to send descriptor within timeout`, 'WorkerSpawn');
170
- worker.terminate();
175
+ void worker.terminate();
171
176
  reject(new Error(`Worker ${index} initialization timeout`));
172
177
  }
173
178
  }, 10000); // 10 second timeout
@@ -201,7 +206,7 @@ export class UWSWorkerClusterManager {
201
206
  logger.info(`Worker ${index} taking too long to exit, terminating forcefully`, 'Shutdown');
202
207
  try {
203
208
  // Terminate is the last resort for stuck workers
204
- worker.terminate();
209
+ void worker.terminate();
205
210
  }
206
211
  catch {
207
212
  logger.error(`Error terminating worker ${index}`, 'Shutdown');
@@ -231,7 +236,7 @@ export class UWSWorkerClusterManager {
231
236
  logger.error(`Failed to send shutdown message to worker ${index}`, 'Shutdown');
232
237
  clearTimeout(timeout);
233
238
  try {
234
- worker.terminate();
239
+ void worker.terminate();
235
240
  }
236
241
  catch {
237
242
  // Ignore termination errors
@@ -251,8 +256,8 @@ export class UWSWorkerClusterManager {
251
256
  logger.info('Shutdown complete', 'Shutdown');
252
257
  process.exit(0);
253
258
  };
254
- process.on('SIGINT', gracefulShutdown);
255
- process.on('SIGTERM', gracefulShutdown);
259
+ process.on('SIGINT', () => void gracefulShutdown());
260
+ process.on('SIGTERM', () => void gracefulShutdown());
256
261
  }
257
262
  static isUWSWorker() {
258
263
  return !isMainThread && process.env.UWS_WORKER_MODE === 'true';
@@ -286,33 +291,35 @@ export class UWSWorkerClusterManager {
286
291
  if (!parentPort) {
287
292
  return;
288
293
  }
289
- parentPort.on('message', async (message) => {
290
- if (message.type === 'shutdown') {
291
- logger.info(`Worker thread ${threadId} shutting down...`, 'Worker');
292
- try {
293
- // Call the close callback and wait if it's async
294
- const result = closeCallback();
295
- if (result && typeof result.then === 'function') {
296
- await result;
294
+ parentPort.on('message', (message) => {
295
+ void (async () => {
296
+ if (message.type === 'shutdown') {
297
+ logger.info(`Worker thread ${threadId} shutting down...`, 'Worker');
298
+ try {
299
+ // Call the close callback and wait if it's async
300
+ const result = closeCallback();
301
+ if (result && typeof result.then === 'function') {
302
+ await result;
303
+ }
304
+ // Give uWebSockets event loop time to fully cleanup
305
+ await new Promise(resolve => setTimeout(resolve, 150));
306
+ // Close parent port to signal we're ready to exit
307
+ if (parentPort) {
308
+ parentPort.close();
309
+ }
310
+ logger.info(`Worker thread ${threadId} cleanup complete`, 'Worker');
311
+ // DON'T call process.exit() - let Node.js exit naturally
312
+ // This allows the event loop to properly drain all uWebSockets handles
313
+ // The worker will exit on its own once all handles are closed
297
314
  }
298
- // Give uWebSockets event loop time to fully cleanup
299
- await new Promise(resolve => setTimeout(resolve, 150));
300
- // Close parent port to signal we're ready to exit
301
- if (parentPort) {
302
- parentPort.close();
315
+ catch (error) {
316
+ logger.error('Error during worker shutdown', 'Worker', {
317
+ error: error instanceof Error ? error.message : String(error),
318
+ });
319
+ // Still don't force exit - let it drain naturally
303
320
  }
304
- logger.info(`Worker thread ${threadId} cleanup complete`, 'Worker');
305
- // DON'T call process.exit() - let Node.js exit naturally
306
- // This allows the event loop to properly drain all uWebSockets handles
307
- // The worker will exit on its own once all handles are closed
308
321
  }
309
- catch (error) {
310
- logger.error('Error during worker shutdown', 'Worker', {
311
- error: error instanceof Error ? error.message : String(error),
312
- });
313
- // Still don't force exit - let it drain naturally
314
- }
315
- }
322
+ })();
316
323
  });
317
324
  }
318
325
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uws-worker-clustering.js","sourceRoot":"","sources":["../../../../src/core/http/utils/uws-worker-clustering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uws-worker-clustering.js","sourceRoot":"","sources":["../../../../src/core/http/utils/uws-worker-clustering.ts"],"names":[],"mappings":"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","sourcesContent":["// uWebSockets.js Worker Thread Clustering Implementation\n// Uses worker threads with acceptor pattern for maximum performance\n//\n// NOTE: When terminating, you may see \"uv_loop_close() while having open handles\" warnings\n// from Node.js. This is a known limitation when using uWebSockets.js with worker threads.\n// The uWS C++ addon maintains internal libuv poll handles that cannot be cleanly closed\n// through JavaScript APIs. These warnings are harmless - the process will still exit cleanly.\n// To suppress these warnings, you can run Node.js with: --no-warnings or\n// NODE_NO_WARNINGS=1 environment variable.\n\nimport { Worker, isMainThread, threadId, parentPort } from 'worker_threads';\nimport os from 'os';\nimport { createFrameworkLogger } from '../../logger/index.js';\nimport { loadNativeEngine } from '../../utilities/package-utils.js';\n\nconst logger = createFrameworkLogger('UWSClustering');\n\nexport interface UWSClusterConfig {\n workers?: number | 'auto';\n memoryPerWorkerGB?: number;\n port: number;\n host?: string;\n ssl?: {\n key_file_name?: string;\n cert_file_name?: string;\n passphrase?: string;\n };\n}\n\nexport class UWSWorkerClusterManager {\n private workers: Worker[] = [];\n private acceptorApp: any = null;\n private acceptorListenSocket: any = null;\n private uws: any = null;\n private config: UWSClusterConfig;\n private workerCount: number;\n private isShuttingDown = false;\n\n constructor(config: UWSClusterConfig) {\n this.config = config;\n this.workerCount = this.calculateWorkerCount();\n }\n\n private calculateWorkerCount(): number {\n let workerCount = this.config.workers || os.cpus().length;\n\n if (workerCount === 'auto') {\n const cpuCount = os.cpus().length;\n const totalMemoryGB = os.totalmem() / (1024 * 1024 * 1024);\n\n let memoryPerWorkerGB = this.config.memoryPerWorkerGB;\n\n if (!memoryPerWorkerGB) {\n const headroomGB = 4;\n memoryPerWorkerGB = Math.max(0.5, Math.floor((totalMemoryGB - headroomGB) / cpuCount));\n }\n\n workerCount = Math.min(cpuCount, Math.floor(totalMemoryGB / memoryPerWorkerGB));\n\n logger.info(\n `Auto-calculated worker count: ${workerCount} (CPU: ${cpuCount}, RAM: ${totalMemoryGB.toFixed(1)}GB, ${memoryPerWorkerGB}GB per worker)`,\n 'WorkerCalculation'\n );\n } else if (typeof workerCount === 'number') {\n logger.info(`Using specified worker count: ${workerCount}`, 'WorkerCalculation');\n }\n\n return workerCount;\n }\n\n async startAcceptorAndWorkers(_appFactory: () => any): Promise<void> {\n if (!isMainThread) {\n throw new Error('startAcceptorAndWorkers can only be called from main thread');\n }\n\n try {\n // Worker clustering uses the uWS-shaped App/SSLApp + SO_REUSEPORT API,\n // so it needs uWebSockets.js specifically (not @morojs/engine).\n const engine = loadNativeEngine({ candidates: ['uWebSockets.js'] });\n if (!engine) {\n throw new Error('uWebSockets.js is not available for uWS worker clustering');\n }\n const uwsModule = engine.module;\n this.uws = uwsModule.default || uwsModule;\n\n // Create acceptor app - must match SSL config of worker apps\n const ssl = this.config.ssl;\n if (ssl && ssl.key_file_name && ssl.cert_file_name) {\n this.acceptorApp = this.uws.SSLApp({\n key_file_name: ssl.key_file_name,\n cert_file_name: ssl.cert_file_name,\n passphrase: ssl.passphrase,\n });\n logger.info('uWebSockets SSL acceptor app created', 'Acceptor');\n } else {\n this.acceptorApp = this.uws.App();\n logger.info('uWebSockets acceptor app created', 'Acceptor');\n }\n\n // Start listening on acceptor\n const port = this.config.port;\n this.acceptorApp.listen(port, (token: any) => {\n if (token) {\n this.acceptorListenSocket = token;\n logger.info(`Acceptor listening on port ${port} from thread ${threadId}`, 'Acceptor');\n } else {\n throw new Error(`Failed to listen on port ${port} from thread ${threadId}`);\n }\n });\n\n // Spawn workers\n logger.info(`Starting ${this.workerCount} worker threads`, 'Workers');\n\n for (let i = 0; i < this.workerCount; i++) {\n await this.spawnWorker(i);\n }\n\n // Setup graceful shutdown\n this.setupGracefulShutdown();\n } catch (error) {\n logger.error('Failed to start acceptor and workers', 'Startup', {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n\n private async spawnWorker(index: number): Promise<void> {\n return new Promise((resolve, reject) => {\n const scriptPath = process.argv[1];\n if (scriptPath === undefined) {\n reject(new Error('Cannot spawn worker: process.argv[1] (entry script) is unavailable'));\n return;\n }\n const worker = new Worker(scriptPath, {\n workerData: {\n isUWSWorker: true,\n workerIndex: index,\n config: this.config,\n },\n argv: process.argv.slice(2),\n env: {\n ...process.env,\n UWS_WORKER_MODE: 'true',\n UWS_WORKER_INDEX: String(index),\n },\n });\n\n let descriptorReceived = false;\n\n worker.on('message', (message: any) => {\n if (message.type === 'descriptor' && message.descriptor) {\n if (!this.acceptorApp) {\n logger.error('Acceptor app not initialized', 'WorkerSpawn');\n reject(new Error('Acceptor app not initialized'));\n return;\n }\n\n try {\n this.acceptorApp.addChildAppDescriptor(message.descriptor);\n descriptorReceived = true;\n logger.info(\n `Worker ${index} (thread ${message.threadId}) registered with acceptor`,\n 'WorkerSpawn'\n );\n resolve();\n } catch (error) {\n logger.error('Failed to add child app descriptor', 'WorkerSpawn', {\n error: error instanceof Error ? error.message : String(error),\n });\n reject(error);\n }\n } else if (message.type === 'error') {\n logger.error(`Worker ${index} initialization error: ${message.error}`, 'WorkerSpawn');\n reject(new Error(message.error));\n }\n });\n\n worker.on('error', (error: Error) => {\n logger.error(`Worker ${index} error`, 'Worker', {\n error: error.message,\n });\n if (!descriptorReceived) {\n reject(error);\n }\n });\n\n worker.on('exit', (code: number) => {\n // Worker threads don't have exitedAfterDisconnect like cluster workers\n // Restart on any non-zero exit code\n if (code !== 0) {\n logger.warn(`Worker ${index} died unexpectedly (code: ${code}). Restarting...`, 'Worker');\n\n // Remove from workers array\n const workerIdx = this.workers.indexOf(worker);\n if (workerIdx > -1) {\n this.workers.splice(workerIdx, 1);\n }\n\n // Restart worker\n this.spawnWorker(index).catch(error => {\n logger.error('Failed to restart worker', 'Worker', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n }\n });\n\n this.workers.push(worker);\n\n // Timeout for descriptor reception\n setTimeout(() => {\n if (!descriptorReceived) {\n logger.error(`Worker ${index} failed to send descriptor within timeout`, 'WorkerSpawn');\n void worker.terminate();\n reject(new Error(`Worker ${index} initialization timeout`));\n }\n }, 10000); // 10 second timeout\n });\n }\n\n private setupGracefulShutdown(): void {\n const gracefulShutdown = async () => {\n if (this.isShuttingDown) return;\n this.isShuttingDown = true;\n\n logger.info('Gracefully shutting down worker cluster...', 'Shutdown');\n\n // Close acceptor listen socket first\n if (this.acceptorListenSocket && this.uws) {\n try {\n this.uws.us_listen_socket_close(this.acceptorListenSocket);\n this.acceptorListenSocket = null;\n logger.info('Acceptor listen socket closed', 'Shutdown');\n } catch (error) {\n logger.error('Error closing acceptor socket', 'Shutdown', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Send shutdown message to all workers and wait for them to close\n const shutdownPromises = this.workers.map((worker, index) => {\n return new Promise<void>(resolve => {\n let workerExited = false;\n\n const timeout = setTimeout(() => {\n if (!workerExited) {\n logger.info(\n `Worker ${index} taking too long to exit, terminating forcefully`,\n 'Shutdown'\n );\n try {\n // Terminate is the last resort for stuck workers\n void worker.terminate();\n } catch {\n logger.error(`Error terminating worker ${index}`, 'Shutdown');\n }\n }\n resolve();\n }, 2000); // Give 2 seconds for graceful exit\n\n worker.once('exit', code => {\n workerExited = true;\n clearTimeout(timeout);\n if (code === 0) {\n logger.info(`Worker ${index} exited cleanly`, 'Shutdown');\n } else if (code === 1) {\n logger.info(`Worker ${index} terminated (exit code ${code})`, 'Shutdown');\n } else {\n logger.warn(`Worker ${index} exited with unexpected code ${code}`, 'Shutdown');\n }\n resolve();\n });\n\n // Send shutdown message\n try {\n worker.postMessage({ type: 'shutdown' });\n } catch {\n logger.error(`Failed to send shutdown message to worker ${index}`, 'Shutdown');\n clearTimeout(timeout);\n try {\n void worker.terminate();\n } catch {\n // Ignore termination errors\n }\n resolve();\n }\n });\n });\n\n await Promise.all(shutdownPromises);\n logger.info('All workers shut down', 'Shutdown');\n\n // Clear acceptor app reference to allow uWebSockets to cleanup\n if (this.acceptorApp) {\n this.acceptorApp = null;\n }\n\n // Give uWebSockets event loop time to fully cleanup before exiting\n await new Promise(resolve => setTimeout(resolve, 200));\n\n logger.info('Shutdown complete', 'Shutdown');\n process.exit(0);\n };\n\n process.on('SIGINT', () => void gracefulShutdown());\n process.on('SIGTERM', () => void gracefulShutdown());\n }\n\n static isUWSWorker(): boolean {\n return !isMainThread && process.env.UWS_WORKER_MODE === 'true';\n }\n\n static async sendDescriptorToAcceptor(app: any): Promise<void> {\n if (isMainThread || !parentPort) {\n throw new Error('sendDescriptorToAcceptor can only be called from worker thread');\n }\n\n try {\n const descriptor = app.getDescriptor();\n\n parentPort.postMessage({\n type: 'descriptor',\n descriptor,\n threadId,\n });\n\n logger.info(`Worker thread ${threadId} sent descriptor to acceptor`, 'Worker');\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error('Failed to send descriptor to acceptor', 'Worker', { error: errorMessage });\n\n if (parentPort) {\n parentPort.postMessage({\n type: 'error',\n error: errorMessage,\n });\n }\n\n throw error;\n }\n }\n\n static setupWorkerShutdownHandler(closeCallback: () => void | Promise<void>): void {\n if (!parentPort) {\n return;\n }\n\n parentPort.on('message', (message: any) => {\n void (async () => {\n if (message.type === 'shutdown') {\n logger.info(`Worker thread ${threadId} shutting down...`, 'Worker');\n\n try {\n // Call the close callback and wait if it's async\n const result = closeCallback();\n if (result && typeof result.then === 'function') {\n await result;\n }\n\n // Give uWebSockets event loop time to fully cleanup\n await new Promise(resolve => setTimeout(resolve, 150));\n\n // Close parent port to signal we're ready to exit\n if (parentPort) {\n parentPort.close();\n }\n\n logger.info(`Worker thread ${threadId} cleanup complete`, 'Worker');\n\n // DON'T call process.exit() - let Node.js exit naturally\n // This allows the event loop to properly drain all uWebSockets handles\n // The worker will exit on its own once all handles are closed\n } catch (error) {\n logger.error('Error during worker shutdown', 'Worker', {\n error: error instanceof Error ? error.message : String(error),\n });\n // Still don't force exit - let it drain naturally\n }\n }\n })();\n });\n }\n}\n"]}
@@ -120,6 +120,7 @@ export declare class UWebSocketsHttpServer {
120
120
  private handleNativeRouteError;
121
121
  private handleRequest;
122
122
  private createMoroRequest;
123
+ private static sanitizeHeaderValue;
123
124
  private static writeHeaders;
124
125
  private static getStatusString;
125
126
  private static readonly ResponsePrototype;
@@ -126,6 +126,8 @@ export class UwsRequest extends LazyEventEmitter {
126
126
  const parts = header.split(';');
127
127
  for (let i = 0; i < parts.length; i++) {
128
128
  const part = parts[i];
129
+ if (part === undefined)
130
+ continue;
129
131
  const eq = part.indexOf('=');
130
132
  if (eq > 0) {
131
133
  const name = part.substring(0, eq).trim();
@@ -174,12 +176,12 @@ export class UwsRequest extends LazyEventEmitter {
174
176
  // ==== Express-compatible request helpers (parity with the Node adapter) ====
175
177
  get hostname() {
176
178
  const host = this.headers.host || '';
177
- return host ? host.split(':')[0] : '';
179
+ return host ? (host.split(':')[0] ?? '') : '';
178
180
  }
179
181
  get protocol() {
180
182
  const forwardedProto = this.headers['x-forwarded-proto'];
181
183
  if (forwardedProto)
182
- return forwardedProto.split(',')[0].trim();
184
+ return (forwardedProto.split(',')[0] ?? '').trim();
183
185
  return this._server && this._server.isSsl ? 'https' : 'http';
184
186
  }
185
187
  get secure() {
@@ -220,7 +222,7 @@ export class UwsRequest extends LazyEventEmitter {
220
222
  const ct = this.headers['content-type'] || '';
221
223
  if (!ct)
222
224
  return false;
223
- const mime = ct.split(';')[0].trim().toLowerCase();
225
+ const mime = (ct.split(';')[0] ?? '').trim().toLowerCase();
224
226
  const t = type.toLowerCase();
225
227
  if (t.indexOf('/') === -1) {
226
228
  return mime.endsWith(`/${t}`) || mime.endsWith(`+${t}`);
@@ -237,7 +239,7 @@ export class UwsRequest extends LazyEventEmitter {
237
239
  const wanted = Array.isArray(types) ? types : [types];
238
240
  if (accept === '*/*' || accept === '')
239
241
  return wanted[0] || false;
240
- const acceptTypes = accept.split(',').map(s => s.split(';')[0].trim().toLowerCase());
242
+ const acceptTypes = accept.split(',').map(s => (s.split(';')[0] ?? '').trim().toLowerCase());
241
243
  for (const w of wanted) {
242
244
  const wl = w.toLowerCase();
243
245
  const wMime = wl.indexOf('/') === -1 ? `application/${wl}` : wl;
@@ -263,7 +265,7 @@ export class UwsRequest extends LazyEventEmitter {
263
265
  .split(',')
264
266
  .map(s => {
265
267
  const parts = s.trim().split(';');
266
- const tag = parts[0].toLowerCase();
268
+ const tag = (parts[0] ?? '').toLowerCase();
267
269
  const qPart = parts.find(p => p.trim().startsWith('q='));
268
270
  const q = qPart ? parseFloat(qPart.trim().slice(2)) : 1;
269
271
  return { tag, q: isNaN(q) ? 0 : q };
@@ -346,7 +348,8 @@ export class UWebSocketsHttpServer {
346
348
  this.maxBodySize = options.maxBodySize;
347
349
  if (options.maxUploadSize)
348
350
  this.maxUploadSize = options.maxUploadSize;
349
- this._limits = options.limits;
351
+ if (options.limits)
352
+ this._limits = options.limits;
350
353
  if (options.limits?.multipart)
351
354
  this.multipartLimits = options.limits.multipart;
352
355
  this.initPromise = this.initialize(options);
@@ -362,7 +365,8 @@ export class UWebSocketsHttpServer {
362
365
  // routes are included.
363
366
  setNativeRouteProvider(provider, onError) {
364
367
  this.nativeRouteProvider = provider;
365
- this.nativeErrorHandler = onError;
368
+ if (onError)
369
+ this.nativeErrorHandler = onError;
366
370
  }
367
371
  async initialize(options) {
368
372
  try {
@@ -435,7 +439,7 @@ export class UWebSocketsHttpServer {
435
439
  // method-specific routes registered later take priority in uWS's router
436
440
  // (static > parameter > wildcard).
437
441
  this.app.any('/*', (res, req) => {
438
- this.handleRequest(req, res);
442
+ void this.handleRequest(req, res);
439
443
  });
440
444
  }
441
445
  // Register fast-path routes (no middleware/auth/validation) directly on
@@ -466,7 +470,7 @@ export class UWebSocketsHttpServer {
466
470
  if (this.globalMiddleware.length !== 0 ||
467
471
  (this.hookManager &&
468
472
  (this.hookManager.hasHooks === undefined || this.hookManager.hasHooks('request')))) {
469
- this.handleRequest(req, res);
473
+ void this.handleRequest(req, res);
470
474
  return;
471
475
  }
472
476
  this.handleNativeRoute(req, res, handler, methodInterned, paramNames, needsBody);
@@ -483,7 +487,10 @@ export class UWebSocketsHttpServer {
483
487
  if (paramNames) {
484
488
  const params = {};
485
489
  for (let i = 0; i < paramNames.length; i++) {
486
- params[paramNames[i]] = req.getParameter(i);
490
+ const paramName = paramNames[i];
491
+ if (paramName === undefined)
492
+ continue;
493
+ params[paramName] = req.getParameter(i);
487
494
  }
488
495
  httpReq.params = params;
489
496
  }
@@ -520,6 +527,7 @@ export class UWebSocketsHttpServer {
520
527
  }
521
528
  if (result !== undefined && !httpRes.headersSent)
522
529
  httpRes.json(result);
530
+ return;
523
531
  })
524
532
  .catch(err => this.handleNativeRouteError(err, httpReq, httpRes, res));
525
533
  return;
@@ -635,6 +643,12 @@ export class UWebSocketsHttpServer {
635
643
  // readBody awaits - snapshot uWS-backed data first
636
644
  httpReq.materialize();
637
645
  await this.readBody(res, httpReq);
646
+ // A client that disconnects mid-upload resolves readBody with a
647
+ // null/partial body; do not run hooks, middleware or the handler for
648
+ // a dead request (matches the native fast-path guard at ~line 625 and
649
+ // the Node backend, whose aborted stream rejects parseBody).
650
+ if (res.aborted)
651
+ return;
638
652
  }
639
653
  }
640
654
  // Execute hooks before request processing - skipped entirely when none registered
@@ -718,12 +732,31 @@ export class UWebSocketsHttpServer {
718
732
  // materialize() snapshots them before the first await
719
733
  return new UwsRequest(this, req, method, url, queryString);
720
734
  }
735
+ // Strip CR/LF from a header value to prevent response-splitting / header
736
+ // injection, matching Node's setHeader ERR_INVALID_CHAR guarantee. Guarded
737
+ // with indexOf so the common (clean) path allocates nothing on the hot path.
738
+ static sanitizeHeaderValue(value) {
739
+ return value.indexOf('\r') === -1 && value.indexOf('\n') === -1
740
+ ? value
741
+ : value.replace(/[\r\n]/g, '');
742
+ }
721
743
  // Optimized helper to write headers
722
744
  static writeHeaders(res, headers) {
723
745
  // Performance: for...in is the fastest way to iterate response headers
724
746
  for (const key in headers) {
725
747
  const value = headers[key];
726
- res.writeHeader(key, Array.isArray(value) ? value.join(', ') : String(value));
748
+ if (Array.isArray(value)) {
749
+ // Emit one header line per element instead of comma-joining. RFC 6265
750
+ // forbids folding Set-Cookie, and browsers parse a folded
751
+ // `a=1; Path=/, b=2` as a single cookie, silently dropping the second
752
+ // (session + CSRF is the canonical breakage). uWS writes a separate
753
+ // line per writeHeader call with the same key.
754
+ for (let i = 0; i < value.length; i++) {
755
+ res.writeHeader(key, UWebSocketsHttpServer.sanitizeHeaderValue(String(value[i])));
756
+ }
757
+ continue;
758
+ }
759
+ res.writeHeader(key, UWebSocketsHttpServer.sanitizeHeaderValue(String(value)));
727
760
  }
728
761
  }
729
762
  // Helper to get status string (cached for performance)
@@ -901,7 +934,12 @@ export class UWebSocketsHttpServer {
901
934
  return;
902
935
  // Fast-path JSON serialization for common API patterns
903
936
  let body;
904
- if (data && typeof data === 'object' && 'success' in data) {
937
+ // The interpolated fast path is only valid when `success` is a real
938
+ // boolean (a string/number would produce invalid JSON like
939
+ // {"success":yes,...}), and each interpolated field must be defined
940
+ // (JSON.stringify(undefined) yields the literal token "undefined", which
941
+ // would corrupt the body). Otherwise fall through to JSON.stringify.
942
+ if (data && typeof data === 'object' && typeof data.success === 'boolean') {
905
943
  let keyCount = 0;
906
944
  let hasData = false;
907
945
  let hasError = false;
@@ -917,16 +955,24 @@ export class UWebSocketsHttpServer {
917
955
  hasTotal = true;
918
956
  }
919
957
  }
920
- if (keyCount === 3 && hasData && hasError) {
958
+ if (keyCount === 3 &&
959
+ hasData &&
960
+ hasError &&
961
+ data.data !== undefined &&
962
+ data.error !== undefined) {
921
963
  body = `{"success":${data.success},"data":${JSON.stringify(data.data)},"error":${JSON.stringify(data.error)}}`;
922
964
  }
923
- else if (keyCount === 3 && hasData && hasTotal) {
965
+ else if (keyCount === 3 &&
966
+ hasData &&
967
+ hasTotal &&
968
+ data.data !== undefined &&
969
+ typeof data.total === 'number') {
924
970
  body = `{"success":${data.success},"data":${JSON.stringify(data.data)},"total":${data.total}}`;
925
971
  }
926
- else if (keyCount === 2 && hasData) {
972
+ else if (keyCount === 2 && hasData && data.data !== undefined) {
927
973
  body = `{"success":${data.success},"data":${JSON.stringify(data.data)}}`;
928
974
  }
929
- else if (keyCount === 2 && hasError) {
975
+ else if (keyCount === 2 && hasError && data.error !== undefined) {
930
976
  body = `{"success":${data.success},"error":${JSON.stringify(data.error)}}`;
931
977
  }
932
978
  else {
@@ -1076,7 +1122,7 @@ export class UWebSocketsHttpServer {
1076
1122
  try {
1077
1123
  this._res.cork(() => {
1078
1124
  this._res.writeStatus(UWebSocketsHttpServer.getStatusString(redirectCode));
1079
- this._res.writeHeader('Location', url);
1125
+ this._res.writeHeader('Location', UWebSocketsHttpServer.sanitizeHeaderValue(url));
1080
1126
  UWebSocketsHttpServer.writeHeaders(this._res, this.responseHeaders);
1081
1127
  this._res.end();
1082
1128
  });
@@ -1601,24 +1647,36 @@ export class UWebSocketsHttpServer {
1601
1647
  // uWebSockets.js automatically enables SO_REUSEPORT when in cluster mode
1602
1648
  // Do NOT pass listenOptions in cluster mode - let uWS handle it automatically
1603
1649
  // In non-cluster mode, we don't need SO_REUSEPORT
1604
- this.app.listen(port, (token) => {
1650
+ const onListen = (token) => {
1605
1651
  if (token) {
1606
1652
  this.listenSocket = token;
1607
1653
  this.isListening = true;
1608
1654
  const clusterInfo = isClusterWorker ? ` (worker ${process.pid})` : '';
1609
- this.logger.info(`uWebSockets HTTP server listening on 0.0.0.0:${port}${clusterInfo}`, 'Listen');
1655
+ this.logger.info(`uWebSockets HTTP server listening on ${host}:${port}${clusterInfo}`, 'Listen');
1610
1656
  if (cb)
1611
1657
  cb();
1612
1658
  }
1613
1659
  else {
1614
1660
  const clusterInfo = isClusterWorker ? ` (worker ${process.pid})` : '';
1615
- this.logger.error(`Failed to listen on port ${port}${clusterInfo}`, 'Listen');
1661
+ this.logger.error(`Failed to listen on ${host}:${port}${clusterInfo}`, 'Listen');
1616
1662
  // Don't throw in cluster workers - let them fail gracefully
1617
1663
  if (!isClusterWorker) {
1618
- throw new Error(`Failed to bind to port ${port}`);
1664
+ throw new Error(`Failed to bind to ${host}:${port}`);
1619
1665
  }
1620
1666
  }
1621
- });
1667
+ };
1668
+ // Honor the requested bind host. For the all-interfaces default (and
1669
+ // cluster mode, where uWS auto-enables SO_REUSEPORT) keep the 2-arg
1670
+ // form so that behavior is unchanged; when a specific host is given
1671
+ // (e.g. 127.0.0.1 for an internal/admin service behind a proxy) use
1672
+ // uWS's (host, port, cb) overload so we don't silently bind 0.0.0.0.
1673
+ const bindAllInterfaces = host === '0.0.0.0' || host === '::';
1674
+ if (bindAllInterfaces) {
1675
+ this.app.listen(port, onListen);
1676
+ }
1677
+ else {
1678
+ this.app.listen(host, port, onListen);
1679
+ }
1622
1680
  })
1623
1681
  .catch(error => {
1624
1682
  this.logger.error('Failed to initialize server before listen', 'Listen', {