@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
@@ -13,6 +13,7 @@ export class WSAdapter {
13
13
  wsLogger = createFrameworkLogger('WEBSOCKET_ADAPTER');
14
14
  customIdGenerator;
15
15
  connectionCounter = 0;
16
+ heartbeatTimer;
16
17
  async initialize(httpServer, options = {}) {
17
18
  try {
18
19
  // Dynamic import from user's context to find their installed ws library
@@ -21,7 +22,14 @@ export class WSAdapter {
21
22
  this.wss = new WebSocketServer({
22
23
  server: httpServer,
23
24
  path: options.path || '/ws',
24
- maxPayload: options.maxPayloadLength || 100 * 1024 * 1024, // 100MB default
25
+ // Matches the ws library's own default (100 MiB) so behavior is
26
+ // unchanged; apps concerned about per-message buffering can lower it
27
+ // via maxPayloadLength.
28
+ maxPayload: options.maxPayloadLength || 100 * 1024 * 1024,
29
+ // Origin allowlist + optional custom upgrade-auth hook. Without this a
30
+ // cookie-authenticated app is open to cross-site WebSocket hijacking:
31
+ // the browser sends auth cookies on a ws:// upgrade from any page.
32
+ verifyClient: this.buildVerifyClient(options),
25
33
  // Note: ws doesn't have built-in compression like socket.io
26
34
  // but browsers handle compression at the transport level
27
35
  });
@@ -29,6 +37,25 @@ export class WSAdapter {
29
37
  this.wss.on('connection', (ws, request) => {
30
38
  this.handleConnection(ws, request);
31
39
  });
40
+ // Protocol-level ping/pong dead-peer detection: terminate half-open
41
+ // sockets that stop answering so they neither leak nor block close().
42
+ const heartbeatMs = options.idleTimeout && options.idleTimeout > 0 ? options.idleTimeout : 30000;
43
+ this.heartbeatTimer = setInterval(() => {
44
+ for (const ws of this.wss.clients) {
45
+ if (ws.isAlive === false) {
46
+ ws.terminate();
47
+ continue;
48
+ }
49
+ ws.isAlive = false;
50
+ try {
51
+ ws.ping();
52
+ }
53
+ catch {
54
+ // socket already going away
55
+ }
56
+ }
57
+ }, heartbeatMs);
58
+ this.heartbeatTimer.unref?.();
32
59
  // Setup default namespace
33
60
  this.createNamespace('/');
34
61
  }
@@ -37,9 +64,81 @@ export class WSAdapter {
37
64
  'Or use a different WebSocket adapter.');
38
65
  }
39
66
  }
67
+ /**
68
+ * Build a `ws` verifyClient callback enforcing the configured CORS origin
69
+ * allowlist and any user-supplied upgrade-auth hook (`options.verifyClient`).
70
+ *
71
+ * `cors.origin` accepts:
72
+ * - undefined / true / '*' -> allow any origin (permissive, back-compat)
73
+ * - false -> same-origin only
74
+ * - string -> that exact origin
75
+ * - string[] -> any origin in the list
76
+ * - (requestOrigin) => ... -> dynamic: return true (allow), false (deny),
77
+ * '*' (allow), or the allowed origin string
78
+ * (allowed when it equals the request origin).
79
+ */
80
+ buildVerifyClient(options) {
81
+ const corsOrigin = options.cors?.origin;
82
+ const userVerify = typeof options.verifyClient === 'function'
83
+ ? options.verifyClient
84
+ : undefined;
85
+ // Allow-all cases need no enforcement at all.
86
+ const allowAll = corsOrigin === undefined || corsOrigin === true || corsOrigin === '*';
87
+ if (allowAll && !userVerify) {
88
+ return undefined;
89
+ }
90
+ return (info) => {
91
+ // allowAll (undefined/true/'*') is handled above; here corsOrigin is a
92
+ // specific rule to enforce.
93
+ if (!allowAll) {
94
+ const origin = info.origin;
95
+ let ok = false;
96
+ if (corsOrigin === false) {
97
+ // Same-origin only: no Origin header (non-browser client) or the
98
+ // Origin host equals the request Host.
99
+ if (!origin) {
100
+ ok = true;
101
+ }
102
+ else {
103
+ try {
104
+ const host = info.req?.headers?.host;
105
+ ok = !!host && new URL(origin).host === host;
106
+ }
107
+ catch {
108
+ ok = false;
109
+ }
110
+ }
111
+ }
112
+ else if (typeof corsOrigin === 'function') {
113
+ // Dynamic: allow based on the function's decision for this origin.
114
+ const decision = corsOrigin(origin);
115
+ ok = decision === true || decision === '*' || (!!origin && decision === origin);
116
+ }
117
+ else if (corsOrigin instanceof RegExp) {
118
+ ok = !!origin && corsOrigin.test(origin);
119
+ }
120
+ else if (typeof corsOrigin === 'string') {
121
+ ok = origin === corsOrigin;
122
+ }
123
+ else if (Array.isArray(corsOrigin)) {
124
+ ok = !!origin && corsOrigin.includes(origin);
125
+ }
126
+ if (!ok) {
127
+ this.wsLogger.warn(`Rejected WebSocket upgrade from disallowed origin: ${origin ?? '(none)'}`);
128
+ return false;
129
+ }
130
+ }
131
+ return userVerify ? userVerify(info) : true;
132
+ };
133
+ }
40
134
  handleConnection(ws, request) {
41
135
  const id = this.generateId();
42
136
  const connection = new WSConnectionWrapper(id, ws, request);
137
+ // Liveness tracking for the heartbeat sweep (see initialize()).
138
+ ws.isAlive = true;
139
+ ws.on('pong', () => {
140
+ ws.isAlive = true;
141
+ });
43
142
  this.connections.set(id, connection);
44
143
  // Parse namespace from URL path or default to '/'
45
144
  const url = new URL(request.url || '/', `http://${request.headers.host}`);
@@ -65,7 +164,22 @@ export class WSAdapter {
65
164
  return this.createNamespace('/');
66
165
  }
67
166
  async close() {
167
+ if (this.heartbeatTimer) {
168
+ clearInterval(this.heartbeatTimer);
169
+ this.heartbeatTimer = undefined;
170
+ }
68
171
  if (this.wss) {
172
+ // Terminate live clients first: wss.close() only stops accepting new
173
+ // connections and does not resolve while sockets remain open, which would
174
+ // otherwise stall the app's graceful shutdown until its timeout.
175
+ for (const ws of this.wss.clients) {
176
+ try {
177
+ ws.terminate();
178
+ }
179
+ catch {
180
+ // socket already going away
181
+ }
182
+ }
69
183
  return new Promise(resolve => {
70
184
  this.wss.close(() => {
71
185
  this.connections.clear();
@@ -128,7 +242,7 @@ class WSNamespaceWrapper {
128
242
  const handlers = this.connectionHandlers;
129
243
  const len = handlers.length;
130
244
  for (let i = 0; i < len; i++) {
131
- handlers[i](connection);
245
+ handlers[i]?.(connection);
132
246
  }
133
247
  });
134
248
  // Clean up on disconnect
@@ -145,7 +259,7 @@ class WSNamespaceWrapper {
145
259
  return;
146
260
  }
147
261
  const middleware = this.middlewares[index++];
148
- middleware(connection, next);
262
+ middleware?.(connection, next);
149
263
  };
150
264
  next();
151
265
  }
@@ -245,7 +359,7 @@ class WSConnectionWrapper {
245
359
  if (handlers) {
246
360
  const len = handlers.length;
247
361
  for (let i = 0; i < len; i++) {
248
- handlers[i](data);
362
+ handlers[i]?.(data);
249
363
  }
250
364
  }
251
365
  return;
@@ -309,14 +423,14 @@ class WSConnectionWrapper {
309
423
  const anyHandlers = this.anyHandlers;
310
424
  const anyLen = anyHandlers.length;
311
425
  for (let i = 0; i < anyLen; i++) {
312
- anyHandlers[i](event, messageData);
426
+ anyHandlers[i]?.(event, messageData);
313
427
  }
314
428
  // Call specific event handlers - optimized with for loop
315
429
  const handlers = this.eventHandlers.get(event);
316
430
  if (handlers) {
317
431
  const len = handlers.length;
318
432
  for (let i = 0; i < len; i++) {
319
- handlers[i](messageData, callback);
433
+ handlers[i]?.(messageData, callback);
320
434
  }
321
435
  }
322
436
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ws-adapter.js","sourceRoot":"","sources":["../../../../src/core/networking/adapters/ws-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-adapter.js","sourceRoot":"","sources":["../../../../src/core/networking/adapters/ws-adapter.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,oEAAoE;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAStE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,OAAO,SAAS;IACZ,GAAG,CAAM,CAAC,4BAA4B;IACtC,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IACnD,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;IACrD,QAAQ,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACtD,iBAAiB,CAAgB;IACjC,iBAAiB,GAAG,CAAC,CAAC;IACtB,cAAc,CAA8C;IAEpE,KAAK,CAAC,UAAU,CAAC,UAAe,EAAE,UAAmC,EAAE;QACrE,IAAI,CAAC;YACH,wEAAwE;YACxE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAEjD,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC;gBAC7B,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;gBAC3B,gEAAgE;gBAChE,qEAAqE;gBACrE,wBAAwB;gBACxB,UAAU,EAAE,OAAO,CAAC,gBAAgB,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;gBACzD,uEAAuE;gBACvE,sEAAsE;gBACtE,mEAAmE;gBACnE,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAC7C,4DAA4D;gBAC5D,yDAAyD;aAC1D,CAAC,CAAC;YAEH,4BAA4B;YAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAO,EAAE,OAAY,EAAE,EAAE;gBAClD,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,oEAAoE;YACpE,sEAAsE;YACtE,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/E,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;oBAClC,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;wBACzB,EAAE,CAAC,SAAS,EAAE,CAAC;wBACf,SAAS;oBACX,CAAC;oBACD,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC;oBACnB,IAAI,CAAC;wBACH,EAAE,CAAC,IAAI,EAAE,CAAC;oBACZ,CAAC;oBAAC,MAAM,CAAC;wBACP,4BAA4B;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC,EAAE,WAAW,CAAC,CAAC;YAChB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;YAE9B,0BAA0B;YAC1B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,mEAAmE;gBACjE,uCAAuC,CAC1C,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,iBAAiB,CACvB,OAAgC;QAEhC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACxC,MAAM,UAAU,GACd,OAAQ,OAAe,CAAC,YAAY,KAAK,UAAU;YACjD,CAAC,CAAG,OAAe,CAAC,YAAuC;YAC3D,CAAC,CAAC,SAAS,CAAC;QAEhB,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,GAAG,CAAC;QACvF,IAAI,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,CAAC,IAAoD,EAAW,EAAE;YACvE,uEAAuE;YACvE,4BAA4B;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAI,EAAE,GAAG,KAAK,CAAC;gBACf,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;oBACzB,iEAAiE;oBACjE,uCAAuC;oBACvC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,EAAE,GAAG,IAAI,CAAC;oBACZ,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC;4BACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC;4BACrC,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;wBAC/C,CAAC;wBAAC,MAAM,CAAC;4BACP,EAAE,GAAG,KAAK,CAAC;wBACb,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC5C,mEAAmE;oBACnE,MAAM,QAAQ,GAAI,UAA0D,CAAC,MAAM,CAAC,CAAC;oBACrF,EAAE,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC;gBAClF,CAAC;qBAAM,IAAI,UAAU,YAAY,MAAM,EAAE,CAAC;oBACxC,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAC1C,EAAE,GAAG,MAAM,KAAK,UAAU,CAAC;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBACrC,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC/C,CAAC;gBACD,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,sDAAsD,MAAM,IAAI,QAAQ,EAAE,CAC3E,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,EAAO,EAAE,OAAY;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAE5D,gEAAgE;QAChE,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;QAClB,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACjB,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAErC,kDAAkD;QAClD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;QAE5F,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,yBAAyB;QACzB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,oEAAoE;QACpE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IACzC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,0EAA0E;YAC1E,iEAAiE;YACjE,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,EAAE,CAAC,SAAS,EAAE,CAAC;gBACjB,CAAC;gBAAC,MAAM,CAAC;oBACP,4BAA4B;gBAC9B,CAAC;YACH,CAAC;YACD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;oBAClB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;oBACxB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,cAAc,CAAC,OAAgB,EAAE,WAAgB,EAAE;QACjD,sDAAsD;QACtD,uDAAuD;QACvD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,SAAuB;QAC1C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACxD,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,UAA+B;QACvD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,gBAAgB,CAAC,EAAU;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,kBAAkB;IAMZ;IACA;IANF,kBAAkB,GAA8C,EAAE,CAAC;IACnE,WAAW,GAA0B,EAAE,CAAC;IACxC,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;IAE7D,YACU,aAAqB,EACrB,OAAkB;QADlB,kBAAa,GAAb,aAAa,CAAQ;QACrB,YAAO,GAAP,OAAO,CAAW;IACzB,CAAC;IAEJ,gBAAgB,CAAC,UAA+B;QAC9C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAEhD,kBAAkB;QAClB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE;YACnC,uDAAuD;YACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,UAA+B,EAAE,QAAoB;QAC1E,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;YAC3B,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC5C,IAAI,CAAC,GAAG;oBAAE,QAAQ,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7C,UAAU,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,IAAI,EAAE,CAAC;IACT,CAAC;IAED,EAAE,CAAC,KAAmB,EAAE,OAA8C;QACpE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,IAAS;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzB,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,EAAE,CAAC,IAAuB;QACxB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,IAAuB;QAC5B,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,UAA+B;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,mBAAmB;IAQL;IACA;IACR;IATH,IAAI,GAAwB,EAAE,CAAC;IAC9B,aAAa,GAAG,IAAI,GAAG,EAA8B,CAAC;IACtD,WAAW,GAAuB,EAAE,CAAC;IACrC,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1B,UAAU,GAAG,IAAI,CAAC;IAE1B,YACkB,EAAU,EACV,EAAO,EACf,OAAY;QAFJ,OAAE,GAAF,EAAE,CAAQ;QACV,OAAE,GAAF,EAAE,CAAK;QACf,YAAO,GAAP,OAAO,CAAK;QAEpB,yBAAyB;QACzB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;YACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC7F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,iBAAiB;IACvE,CAAC;IAED,IAAI,SAAS;QACX,sCAAsC;QACtC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,kDAAkD;QAClD,OAAO,IAAI,gBAAgB,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,EAAE,CAAC,KAAa,EAAE,OAAiE;QACjF,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3C,0BAA0B;YAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,oEAAoE;YACpE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,oEAAoE;QACpE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAgD;QACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,IAAU;QAC5B,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3C,kBAAkB;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,IAAS;QACrC,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,IAAuB;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAuB;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,EAAE,CAAC,IAAuB;QACxB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,KAAe;QACxB,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAElE,sDAAsD;YACtD,MAAM,QAAQ,GAAG,UAAU;gBACzB,CAAC,CAAC,CAAC,QAAa,EAAE,EAAE;oBAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBACH,CAAC,CAAC,SAAS,CAAC;YAEd,8CAA8C;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACrC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACvC,CAAC;YAED,yDAAyD;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,gBAAgB;IAEV;IACA;IACA;IACA;IAJV,YACU,WAA6C,EAC7C,WAA+B,EAC/B,YAAgC,EAChC,SAAkB;QAHlB,gBAAW,GAAX,WAAW,CAAkC;QAC7C,gBAAW,GAAX,WAAW,CAAoB;QAC/B,iBAAY,GAAZ,YAAY,CAAoB;QAChC,cAAS,GAAT,SAAS,CAAS;IACzB,CAAC;IAEJ,IAAI,CAAC,KAAa,EAAE,IAAS;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvD,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACrE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,EAAE,CAAC,IAAuB;QACxB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,CAAC,IAAuB;QAC5B,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxF,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,uBAAuB,CAAC,UAA+B;QAC7D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEpC,wEAAwE;QACxE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAW,CAAC,EAAE,CAAC;wBAC7C,aAAa,GAAG,IAAI,CAAC;wBACrB,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,aAAa;oBAAE,OAAO,KAAK,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;oBAAE,OAAO,KAAK,CAAC;YACjD,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAW,CAAC;wBAAE,OAAO,KAAK,CAAC;gBAC9D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;oBAAE,OAAO,KAAK,CAAC;YACjD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["// Native WebSocket Adapter for Moro Framework\n// Implements the WebSocket adapter interface using the 'ws' library\n\nimport { resolveUserPackage } from '../../utilities/package-utils.js';\nimport {\n WebSocketAdapter,\n WebSocketAdapterOptions,\n WebSocketNamespace,\n WebSocketConnection,\n WebSocketEmitter,\n WebSocketMiddleware,\n} from '../websocket-adapter.js';\nimport { createFrameworkLogger } from '../../logger/index.js';\n\n/**\n * Native WebSocket adapter using the 'ws' library\n * Provides a lightweight, standards-compliant WebSocket implementation\n */\nexport class WSAdapter implements WebSocketAdapter {\n private wss: any; // WebSocket server instance\n private namespaces = new Map<string, WSNamespaceWrapper>();\n private connections = new Map<string, WSConnectionWrapper>();\n private wsLogger = createFrameworkLogger('WEBSOCKET_ADAPTER');\n private customIdGenerator?: () => string;\n private connectionCounter = 0;\n private heartbeatTimer?: ReturnType<typeof setInterval> | undefined;\n\n async initialize(httpServer: any, options: WebSocketAdapterOptions = {}): Promise<void> {\n try {\n // Dynamic import from user's context to find their installed ws library\n const wsPath = resolveUserPackage('ws');\n const { WebSocketServer } = await import(wsPath);\n\n this.wss = new WebSocketServer({\n server: httpServer,\n path: options.path || '/ws',\n // Matches the ws library's own default (100 MiB) so behavior is\n // unchanged; apps concerned about per-message buffering can lower it\n // via maxPayloadLength.\n maxPayload: options.maxPayloadLength || 100 * 1024 * 1024,\n // Origin allowlist + optional custom upgrade-auth hook. Without this a\n // cookie-authenticated app is open to cross-site WebSocket hijacking:\n // the browser sends auth cookies on a ws:// upgrade from any page.\n verifyClient: this.buildVerifyClient(options),\n // Note: ws doesn't have built-in compression like socket.io\n // but browsers handle compression at the transport level\n });\n\n // Setup connection handling\n this.wss.on('connection', (ws: any, request: any) => {\n this.handleConnection(ws, request);\n });\n\n // Protocol-level ping/pong dead-peer detection: terminate half-open\n // sockets that stop answering so they neither leak nor block close().\n const heartbeatMs =\n options.idleTimeout && options.idleTimeout > 0 ? options.idleTimeout : 30000;\n this.heartbeatTimer = setInterval(() => {\n for (const ws of this.wss.clients) {\n if (ws.isAlive === false) {\n ws.terminate();\n continue;\n }\n ws.isAlive = false;\n try {\n ws.ping();\n } catch {\n // socket already going away\n }\n }\n }, heartbeatMs);\n this.heartbeatTimer.unref?.();\n\n // Setup default namespace\n this.createNamespace('/');\n } catch {\n throw new Error(\n 'ws library not found. Install it with: npm install ws @types/ws\\n' +\n 'Or use a different WebSocket adapter.'\n );\n }\n }\n\n /**\n * Build a `ws` verifyClient callback enforcing the configured CORS origin\n * allowlist and any user-supplied upgrade-auth hook (`options.verifyClient`).\n *\n * `cors.origin` accepts:\n * - undefined / true / '*' -> allow any origin (permissive, back-compat)\n * - false -> same-origin only\n * - string -> that exact origin\n * - string[] -> any origin in the list\n * - (requestOrigin) => ... -> dynamic: return true (allow), false (deny),\n * '*' (allow), or the allowed origin string\n * (allowed when it equals the request origin).\n */\n private buildVerifyClient(\n options: WebSocketAdapterOptions\n ): ((info: { origin?: string; req: any; secure: boolean }) => boolean) | undefined {\n const corsOrigin = options.cors?.origin;\n const userVerify =\n typeof (options as any).verifyClient === 'function'\n ? ((options as any).verifyClient as (info: any) => boolean)\n : undefined;\n\n // Allow-all cases need no enforcement at all.\n const allowAll = corsOrigin === undefined || corsOrigin === true || corsOrigin === '*';\n if (allowAll && !userVerify) {\n return undefined;\n }\n\n return (info: { origin?: string; req: any; secure: boolean }): boolean => {\n // allowAll (undefined/true/'*') is handled above; here corsOrigin is a\n // specific rule to enforce.\n if (!allowAll) {\n const origin = info.origin;\n let ok = false;\n if (corsOrigin === false) {\n // Same-origin only: no Origin header (non-browser client) or the\n // Origin host equals the request Host.\n if (!origin) {\n ok = true;\n } else {\n try {\n const host = info.req?.headers?.host;\n ok = !!host && new URL(origin).host === host;\n } catch {\n ok = false;\n }\n }\n } else if (typeof corsOrigin === 'function') {\n // Dynamic: allow based on the function's decision for this origin.\n const decision = (corsOrigin as (o: string | undefined) => boolean | string)(origin);\n ok = decision === true || decision === '*' || (!!origin && decision === origin);\n } else if (corsOrigin instanceof RegExp) {\n ok = !!origin && corsOrigin.test(origin);\n } else if (typeof corsOrigin === 'string') {\n ok = origin === corsOrigin;\n } else if (Array.isArray(corsOrigin)) {\n ok = !!origin && corsOrigin.includes(origin);\n }\n if (!ok) {\n this.wsLogger.warn(\n `Rejected WebSocket upgrade from disallowed origin: ${origin ?? '(none)'}`\n );\n return false;\n }\n }\n return userVerify ? userVerify(info) : true;\n };\n }\n\n private handleConnection(ws: any, request: any): void {\n const id = this.generateId();\n const connection = new WSConnectionWrapper(id, ws, request);\n\n // Liveness tracking for the heartbeat sweep (see initialize()).\n ws.isAlive = true;\n ws.on('pong', () => {\n ws.isAlive = true;\n });\n\n this.connections.set(id, connection);\n\n // Parse namespace from URL path or default to '/'\n const url = new URL(request.url || '/', `http://${request.headers.host}`);\n const namespacePath = url.pathname === '/ws' ? '/' : url.pathname.replace('/ws', '') || '/';\n\n const namespace = this.namespaces.get(namespacePath);\n if (namespace) {\n namespace.handleConnection(connection);\n }\n\n // Clean up on disconnect\n ws.on('close', () => {\n this.connections.delete(id);\n });\n }\n\n createNamespace(namespace: string): WebSocketNamespace {\n if (!this.namespaces.has(namespace)) {\n const ns = new WSNamespaceWrapper(namespace, this);\n this.namespaces.set(namespace, ns);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.namespaces.get(namespace)!;\n }\n\n getDefaultNamespace(): WebSocketNamespace {\n return this.createNamespace('/');\n }\n\n async close(): Promise<void> {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = undefined;\n }\n if (this.wss) {\n // Terminate live clients first: wss.close() only stops accepting new\n // connections and does not resolve while sockets remain open, which would\n // otherwise stall the app's graceful shutdown until its timeout.\n for (const ws of this.wss.clients) {\n try {\n ws.terminate();\n } catch {\n // socket already going away\n }\n }\n return new Promise(resolve => {\n this.wss.close(() => {\n this.connections.clear();\n this.namespaces.clear();\n resolve();\n });\n });\n }\n }\n\n setCompression(enabled: boolean, _options: any = {}): void {\n // ws library handles compression at the browser level\n // This is a no-op but kept for interface compatibility\n if (enabled) {\n this.wsLogger.warn('Compression is handled automatically by the ws library and browsers');\n }\n }\n\n setCustomIdGenerator(generator: () => string): void {\n this.customIdGenerator = generator;\n }\n\n getAdapterName(): string {\n return 'ws';\n }\n\n getConnectionCount(): number {\n return this.connections.size;\n }\n\n generateId(): string {\n if (this.customIdGenerator) {\n return this.customIdGenerator();\n }\n return `ws_${++this.connectionCounter}_${Date.now()}`;\n }\n\n addConnection(id: string, connection: WSConnectionWrapper): void {\n this.connections.set(id, connection);\n }\n\n removeConnection(id: string): void {\n this.connections.delete(id);\n }\n\n getAllConnections(): Map<string, WSConnectionWrapper> {\n return this.connections;\n }\n}\n\n/**\n * WebSocket namespace wrapper\n */\nclass WSNamespaceWrapper implements WebSocketNamespace {\n private connectionHandlers: ((socket: WebSocketConnection) => void)[] = [];\n private middlewares: WebSocketMiddleware[] = [];\n private connections = new Map<string, WSConnectionWrapper>();\n\n constructor(\n private namespacePath: string,\n private adapter: WSAdapter\n ) {}\n\n handleConnection(connection: WSConnectionWrapper): void {\n this.connections.set(connection.id, connection);\n\n // Run middlewares\n this.runMiddlewares(connection, () => {\n // Notify connection handlers - optimized with for loop\n const handlers = this.connectionHandlers;\n const len = handlers.length;\n for (let i = 0; i < len; i++) {\n handlers[i]?.(connection);\n }\n });\n\n // Clean up on disconnect\n connection.on('close', () => {\n this.connections.delete(connection.id);\n });\n }\n\n private runMiddlewares(connection: WSConnectionWrapper, callback: () => void): void {\n let index = 0;\n\n const next = (err?: Error) => {\n if (err || index >= this.middlewares.length) {\n if (!err) callback();\n return;\n }\n\n const middleware = this.middlewares[index++];\n middleware?.(connection, next);\n };\n\n next();\n }\n\n on(event: 'connection', handler: (socket: WebSocketConnection) => void): void {\n this.connectionHandlers.push(handler);\n }\n\n emit(event: string, data: any): void {\n const message = JSON.stringify({ event, data });\n for (const connection of this.connections.values()) {\n if (connection.connected) {\n connection.ws.send(message);\n }\n }\n }\n\n to(room: string | string[]): WebSocketEmitter {\n return new WSEmitterWrapper(this.connections, room);\n }\n\n except(room: string | string[]): WebSocketEmitter {\n return new WSEmitterWrapper(this.connections, undefined, room);\n }\n\n getSockets(): WebSocketConnection[] {\n return Array.from(this.connections.values());\n }\n\n getConnectionCount(): number {\n return this.connections.size;\n }\n\n use(middleware: WebSocketMiddleware): void {\n this.middlewares.push(middleware);\n }\n}\n\n/**\n * WebSocket connection wrapper\n */\nclass WSConnectionWrapper implements WebSocketConnection {\n public data: Record<string, any> = {};\n private eventHandlers = new Map<string, CallableFunction[]>();\n private anyHandlers: CallableFunction[] = [];\n private rooms = new Set<string>();\n private _connected = true;\n\n constructor(\n public readonly id: string,\n public readonly ws: any,\n private request: any\n ) {\n // Setup message handling\n this.ws.on('message', (data: Buffer) => {\n this.handleMessage(data);\n });\n\n this.ws.on('close', () => {\n this._connected = false;\n this.emit('close');\n });\n\n this.ws.on('error', (error: Error) => {\n this.emit('error', error);\n });\n }\n\n get ip(): string | undefined {\n return (\n this.request.socket?.remoteAddress || this.request.headers['x-forwarded-for']?.split(',')[0]\n );\n }\n\n get headers(): Record<string, string> | undefined {\n return this.request.headers;\n }\n\n get connected(): boolean {\n return this._connected && this.ws.readyState === 1; // WebSocket.OPEN\n }\n\n get broadcast(): WebSocketEmitter {\n // Get all connections except this one\n const allConnections = new Map();\n // This would need access to adapter's connections\n return new WSEmitterWrapper(allConnections, undefined, undefined, this.id);\n }\n\n on(event: string, handler: (data: any, callback?: (response?: any) => void) => void): void {\n if (event === 'close' || event === 'error') {\n // Special internal events\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, []);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.eventHandlers.get(event)!.push(handler);\n return;\n }\n\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, []);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.eventHandlers.get(event)!.push(handler);\n }\n\n onAny(handler: (event: string, ...args: any[]) => void): void {\n this.anyHandlers.push(handler);\n }\n\n emit(event: string, data?: any): void {\n if (event === 'close' || event === 'error') {\n // Internal events\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n const len = handlers.length;\n for (let i = 0; i < len; i++) {\n handlers[i]?.(data);\n }\n }\n return;\n }\n\n if (this.connected) {\n const message = JSON.stringify({ event, data });\n this.ws.send(message);\n }\n }\n\n compressedEmit(event: string, data: any): void {\n // ws library handles compression automatically\n this.emit(event, data);\n }\n\n join(room: string | string[]): void {\n if (Array.isArray(room)) {\n const len = room.length;\n for (let i = 0; i < len; i++) {\n this.rooms.add(room[i] as string);\n }\n } else {\n this.rooms.add(room);\n }\n }\n\n leave(room: string | string[]): void {\n if (Array.isArray(room)) {\n const len = room.length;\n for (let i = 0; i < len; i++) {\n this.rooms.delete(room[i] as string);\n }\n } else {\n this.rooms.delete(room);\n }\n }\n\n to(room: string | string[]): WebSocketEmitter {\n const connections = new Map([[this.id, this]]);\n return new WSEmitterWrapper(connections, room);\n }\n\n getRooms(): Set<string> {\n return new Set(this.rooms);\n }\n\n disconnect(close?: boolean): void {\n if (close !== false && this.ws.readyState === 1) {\n this.ws.close();\n }\n this._connected = false;\n }\n\n private handleMessage(data: Buffer): void {\n try {\n const text = data.toString();\n const parsed = JSON.parse(text);\n const { event, data: messageData, callback: callbackId } = parsed;\n\n // Create callback function if callback ID is provided\n const callback = callbackId\n ? (response: any) => {\n this.emit('callback', { id: callbackId, data: response });\n }\n : undefined;\n\n // Call any handlers - optimized with for loop\n const anyHandlers = this.anyHandlers;\n const anyLen = anyHandlers.length;\n for (let i = 0; i < anyLen; i++) {\n anyHandlers[i]?.(event, messageData);\n }\n\n // Call specific event handlers - optimized with for loop\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n const len = handlers.length;\n for (let i = 0; i < len; i++) {\n handlers[i]?.(messageData, callback);\n }\n }\n } catch {\n // Invalid message format - ignore\n }\n }\n}\n\n/**\n * WebSocket emitter wrapper\n */\nclass WSEmitterWrapper implements WebSocketEmitter {\n constructor(\n private connections: Map<string, WSConnectionWrapper>,\n private targetRooms?: string | string[],\n private excludeRooms?: string | string[],\n private excludeId?: string\n ) {}\n\n emit(event: string, data: any): void {\n const message = JSON.stringify({ event, data });\n\n for (const connection of this.connections.values()) {\n if (this.excludeId && connection.id === this.excludeId) {\n continue;\n }\n\n if (this.shouldIncludeConnection(connection) && connection.connected) {\n connection.ws.send(message);\n }\n }\n }\n\n to(room: string | string[]): WebSocketEmitter {\n return new WSEmitterWrapper(this.connections, room, this.excludeRooms, this.excludeId);\n }\n\n except(room: string | string[]): WebSocketEmitter {\n return new WSEmitterWrapper(this.connections, this.targetRooms, room, this.excludeId);\n }\n\n compress(_compress: boolean): WebSocketEmitter {\n // ws library handles compression automatically\n return this;\n }\n\n private shouldIncludeConnection(connection: WSConnectionWrapper): boolean {\n const rooms = connection.getRooms();\n\n // Check target rooms - avoid array wrapping and use efficient iteration\n if (this.targetRooms) {\n if (Array.isArray(this.targetRooms)) {\n let hasTargetRoom = false;\n const len = this.targetRooms.length;\n for (let i = 0; i < len; i++) {\n if (rooms.has(this.targetRooms[i] as string)) {\n hasTargetRoom = true;\n break;\n }\n }\n if (!hasTargetRoom) return false;\n } else {\n if (!rooms.has(this.targetRooms)) return false;\n }\n }\n\n // Check exclude rooms - avoid array wrapping and use efficient iteration\n if (this.excludeRooms) {\n if (Array.isArray(this.excludeRooms)) {\n const len = this.excludeRooms.length;\n for (let i = 0; i < len; i++) {\n if (rooms.has(this.excludeRooms[i] as string)) return false;\n }\n } else {\n if (rooms.has(this.excludeRooms)) return false;\n }\n }\n\n return true;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/networking/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/networking/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["// Networking System - Centralized Exports\nexport { WebSocketManager } from './websocket-manager.js';\nexport { ServiceRegistry } from './service-discovery.js';\nexport type { ServiceInfo, ServiceDiscoveryOptions } from './service-discovery.js';\n"]}
@@ -173,7 +173,9 @@ export class ServiceRegistry {
173
173
  // Health checking
174
174
  startHealthChecks() {
175
175
  if (this.options.healthCheckInterval) {
176
- this.healthCheckInterval = setInterval(() => this.performHealthChecks(), this.options.healthCheckInterval);
176
+ this.healthCheckInterval = setInterval(() => {
177
+ void this.performHealthChecks();
178
+ }, this.options.healthCheckInterval);
177
179
  }
178
180
  }
179
181
  async performHealthChecks() {
@@ -218,15 +220,15 @@ export class ServiceRegistry {
218
220
  }
219
221
  switch (strategy) {
220
222
  case 'random':
221
- return services[Math.floor(Math.random() * services.length)];
223
+ return services[Math.floor(Math.random() * services.length)] ?? null;
222
224
  case 'round-robin':
223
225
  // Simple round-robin (in production, maintain state)
224
- return services[Date.now() % services.length];
226
+ return services[Date.now() % services.length] ?? null;
225
227
  case 'least-connections':
226
228
  // For demo, just return the first (in production, track connections)
227
- return services[0];
229
+ return services[0] ?? null;
228
230
  default:
229
- return services[0];
231
+ return services[0] ?? null;
230
232
  }
231
233
  }
232
234
  // Cleanup
@@ -1 +1 @@
1
- {"version":3,"file":"service-discovery.js","sourceRoot":"","sources":["../../../src/core/networking/service-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-discovery.js","sourceRoot":"","sources":["../../../src/core/networking/service-discovery.ts"],"names":[],"mappings":"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","sourcesContent":["// Service Discovery Client for Microservices\n// Supports Consul, Kubernetes, and in-memory registry\nimport { createFrameworkLogger } from '../logger/index.js';\n\nexport interface ServiceInfo {\n name: string;\n host: string;\n port: number;\n health?: string;\n version?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n}\n\nexport interface ServiceDiscoveryOptions {\n type: 'consul' | 'kubernetes' | 'memory';\n consulUrl?: string;\n kubernetesNamespace?: string;\n healthCheckInterval?: number;\n tags?: string[];\n}\n\nexport class ServiceRegistry {\n private services = new Map<string, ServiceInfo[]>();\n private options: ServiceDiscoveryOptions;\n private healthCheckInterval?: NodeJS.Timeout;\n private serviceLogger = createFrameworkLogger('SERVICE_DISCOVERY');\n\n constructor(options: ServiceDiscoveryOptions) {\n this.options = options;\n this.startHealthChecks();\n }\n\n async register(service: ServiceInfo): Promise<void> {\n const { name } = service;\n\n switch (this.options.type) {\n case 'consul':\n await this.registerWithConsul(service);\n break;\n case 'kubernetes':\n await this.registerWithKubernetes(service);\n break;\n case 'memory':\n this.registerInMemory(service);\n break;\n }\n\n this.serviceLogger.info(`Service registered: ${name}@${service.host}:${service.port}`);\n }\n\n async discover(serviceName: string): Promise<ServiceInfo[]> {\n switch (this.options.type) {\n case 'consul':\n return this.discoverFromConsul(serviceName);\n case 'kubernetes':\n return this.discoverFromKubernetes(serviceName);\n case 'memory':\n return this.discoverFromMemory(serviceName);\n default:\n return [];\n }\n }\n\n async deregister(serviceName: string): Promise<void> {\n switch (this.options.type) {\n case 'consul':\n await this.deregisterFromConsul(serviceName);\n break;\n case 'kubernetes':\n // K8s handles this automatically\n break;\n case 'memory':\n this.services.delete(serviceName);\n break;\n }\n\n this.serviceLogger.info(`Service deregistered: ${serviceName}`);\n }\n\n // In-memory registry methods\n private registerInMemory(service: ServiceInfo): void {\n const existing = this.services.get(service.name) || [];\n const updated = existing.filter(s => s.host !== service.host || s.port !== service.port);\n updated.push(service);\n this.services.set(service.name, updated);\n }\n\n private discoverFromMemory(serviceName: string): ServiceInfo[] {\n return this.services.get(serviceName) || [];\n }\n\n // Consul integration\n private async registerWithConsul(service: ServiceInfo): Promise<void> {\n if (!this.options.consulUrl) {\n throw new Error('Consul URL required for consul service discovery');\n }\n\n const consulService = {\n ID: `${service.name}-${service.host}-${service.port}`,\n Name: service.name,\n Tags: service.tags || [],\n Address: service.host,\n Port: service.port,\n Check: service.health\n ? {\n HTTP: `http://${service.host}:${service.port}${service.health}`,\n Interval: '30s',\n Timeout: '10s',\n }\n : undefined,\n Meta: service.metadata || {},\n };\n\n try {\n const response = await fetch(`${this.options.consulUrl}/v1/agent/service/register`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(consulService),\n });\n\n if (!response.ok) {\n throw new Error(`Consul registration failed: ${response.statusText}`);\n }\n } catch (error) {\n this.serviceLogger.error('Failed to register with Consul', 'SERVICE_DISCOVERY', {\n error: error instanceof Error ? error.message : String(error),\n });\n // Fallback to in-memory\n this.registerInMemory(service);\n }\n }\n\n private async discoverFromConsul(serviceName: string): Promise<ServiceInfo[]> {\n if (!this.options.consulUrl) {\n return this.discoverFromMemory(serviceName);\n }\n\n try {\n const response = await fetch(\n `${this.options.consulUrl}/v1/health/service/${serviceName}?passing=true`\n );\n\n if (!response.ok) {\n throw new Error(`Consul discovery failed: ${response.statusText}`);\n }\n\n const services = (await response.json()) as any[];\n return services.map((entry: any) => ({\n name: entry.Service.Service,\n host: entry.Service.Address,\n port: entry.Service.Port,\n tags: entry.Service.Tags,\n metadata: entry.Service.Meta,\n }));\n } catch (error) {\n this.serviceLogger.error('Failed to discover from Consul', 'SERVICE_DISCOVERY', {\n error: error instanceof Error ? error.message : String(error),\n });\n return this.discoverFromMemory(serviceName);\n }\n }\n\n private async deregisterFromConsul(serviceName: string): Promise<void> {\n if (!this.options.consulUrl) return;\n\n try {\n await fetch(`${this.options.consulUrl}/v1/agent/service/deregister/${serviceName}`, {\n method: 'PUT',\n });\n } catch (error) {\n this.serviceLogger.error('Failed to deregister from Consul', 'SERVICE_DISCOVERY', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Kubernetes integration\n private async registerWithKubernetes(service: ServiceInfo): Promise<void> {\n // In Kubernetes, services are registered via Service/Endpoints resources\n // This would typically be handled by the K8s API, not application code\n this.serviceLogger.info(`K8s service registration: ${service.name} (handled by Kubernetes)`);\n\n // Fallback to in-memory for local development\n this.registerInMemory(service);\n }\n\n private async discoverFromKubernetes(serviceName: string): Promise<ServiceInfo[]> {\n // In K8s, we can discover services via DNS or the K8s API\n const namespace = this.options.kubernetesNamespace || 'default';\n\n try {\n // Try K8s service DNS resolution\n const host = `${serviceName}.${namespace}.svc.cluster.local`;\n\n // For demo purposes, return the service info\n // In production, you'd query the K8s API or use DNS\n return [\n {\n name: serviceName,\n host,\n port: 80, // Default port, should be discovered from service definition\n metadata: { discovered: 'kubernetes' },\n },\n ];\n } catch (error) {\n this.serviceLogger.error('Failed to discover from Kubernetes', 'SERVICE_DISCOVERY', {\n error: error instanceof Error ? error.message : String(error),\n });\n return this.discoverFromMemory(serviceName);\n }\n }\n\n // Health checking\n private startHealthChecks(): void {\n if (this.options.healthCheckInterval) {\n this.healthCheckInterval = setInterval(() => {\n void this.performHealthChecks();\n }, this.options.healthCheckInterval);\n }\n }\n\n private async performHealthChecks(): Promise<void> {\n for (const [serviceName, services] of this.services.entries()) {\n for (const service of services) {\n if (service.health) {\n try {\n const response = await fetch(\n `http://${service.host}:${service.port}${service.health}`,\n {\n timeout: 5000,\n } as any\n );\n\n if (!response.ok) {\n this.serviceLogger.warn(\n `Health check failed for ${serviceName}: ${response.statusText}`\n );\n // Remove unhealthy service\n this.removeUnhealthyService(serviceName, service);\n }\n } catch (error) {\n this.serviceLogger.warn(`Health check failed for ${serviceName}`, 'SERVICE_DISCOVERY', {\n error: error instanceof Error ? error.message : String(error),\n });\n this.removeUnhealthyService(serviceName, service);\n }\n }\n }\n }\n }\n\n private removeUnhealthyService(serviceName: string, unhealthyService: ServiceInfo): void {\n const services = this.services.get(serviceName) || [];\n const filtered = services.filter(\n s => s.host !== unhealthyService.host || s.port !== unhealthyService.port\n );\n\n if (filtered.length === 0) {\n this.services.delete(serviceName);\n } else {\n this.services.set(serviceName, filtered);\n }\n }\n\n // Load balancing\n selectService(\n serviceName: string,\n strategy: 'round-robin' | 'random' | 'least-connections' = 'round-robin'\n ): ServiceInfo | null {\n const services = this.services.get(serviceName) || [];\n\n if (services.length === 0) {\n return null;\n }\n\n switch (strategy) {\n case 'random':\n return services[Math.floor(Math.random() * services.length)] ?? null;\n case 'round-robin':\n // Simple round-robin (in production, maintain state)\n return services[Date.now() % services.length] ?? null;\n case 'least-connections':\n // For demo, just return the first (in production, track connections)\n return services[0] ?? null;\n default:\n return services[0] ?? null;\n }\n }\n\n // Cleanup\n destroy(): void {\n if (this.healthCheckInterval) {\n clearInterval(this.healthCheckInterval);\n }\n }\n\n // Get all registered services\n getAllServices(): Record<string, ServiceInfo[]> {\n return Object.fromEntries(this.services.entries());\n }\n}\n"]}
@@ -1,13 +1,32 @@
1
1
  export interface WebSocketAdapterOptions {
2
2
  compression?: boolean;
3
3
  cors?: {
4
- origin?: string | string[] | boolean;
4
+ /**
5
+ * Allowed origin(s) for cross-origin WebSocket upgrades.
6
+ * - `undefined` / `true` / `'*'` — allow any origin
7
+ * - `false` — same-origin only
8
+ * - `string` / `string[]` — exact origin(s)
9
+ * - `RegExp` — matched origin (Socket.IO)
10
+ * - function — dynamic: the `ws` adapter calls it `(requestOrigin) => boolean | string`
11
+ * (return `true`/`'*'` to allow, `false` to deny, or the allowed origin string);
12
+ * the Socket.IO adapter passes it through to Socket.IO (express-cors `(origin, callback)`).
13
+ */
14
+ origin?: string | string[] | boolean | RegExp | ((requestOrigin: string | undefined, callback?: (err: Error | null, allow?: boolean) => void) => boolean | string | void);
5
15
  methods?: string[];
6
16
  credentials?: boolean;
7
17
  };
8
18
  path?: string;
9
19
  maxPayloadLength?: number;
10
20
  idleTimeout?: number;
21
+ /**
22
+ * Optional upgrade-time authentication hook (ws adapter). Return false to
23
+ * reject the handshake. Runs after the CORS origin check passes.
24
+ */
25
+ verifyClient?: (info: {
26
+ origin?: string;
27
+ req: any;
28
+ secure: boolean;
29
+ }) => boolean;
11
30
  [key: string]: any;
12
31
  }
13
32
  /**
@@ -90,9 +109,9 @@ export interface WebSocketConnection {
90
109
  /** Unique connection ID */
91
110
  id: string;
92
111
  /** Client IP address */
93
- ip?: string;
112
+ ip?: string | undefined;
94
113
  /** Connection headers */
95
- headers?: Record<string, string>;
114
+ headers?: Record<string, string> | undefined;
96
115
  /** Custom data storage */
97
116
  data: Record<string, any>;
98
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-adapter.js","sourceRoot":"","sources":["../../../src/core/networking/websocket-adapter.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,sEAAsE;AAyNtE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAQ,EAAE,IAAS;IACtD,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9B,OAAO;QACL,GAAG,CAAC;QACJ,GAAG,CAAC;QACJ,OAAO,EAAE;YACP,GAAG,KAAK;YACR,GAAG,KAAK;YACR,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;SACvD;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"websocket-adapter.js","sourceRoot":"","sources":["../../../src/core/networking/websocket-adapter.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,sEAAsE;AAgPtE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAQ,EAAE,IAAS;IACtD,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9B,OAAO;QACL,GAAG,CAAC;QACJ,GAAG,CAAC;QACJ,OAAO,EAAE;YACP,GAAG,KAAK;YACR,GAAG,KAAK;YACR,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;SACvD;KACF,CAAC;AACJ,CAAC","sourcesContent":["// WebSocket Adapter Interface for Moro Framework\n// Provides a common interface for different WebSocket implementations\n\nexport interface WebSocketAdapterOptions {\n compression?: boolean;\n cors?: {\n /**\n * Allowed origin(s) for cross-origin WebSocket upgrades.\n * - `undefined` / `true` / `'*'` — allow any origin\n * - `false` — same-origin only\n * - `string` / `string[]` — exact origin(s)\n * - `RegExp` — matched origin (Socket.IO)\n * - function — dynamic: the `ws` adapter calls it `(requestOrigin) => boolean | string`\n * (return `true`/`'*'` to allow, `false` to deny, or the allowed origin string);\n * the Socket.IO adapter passes it through to Socket.IO (express-cors `(origin, callback)`).\n */\n origin?:\n | string\n | string[]\n | boolean\n | RegExp\n | ((\n requestOrigin: string | undefined,\n callback?: (err: Error | null, allow?: boolean) => void\n ) => boolean | string | void);\n methods?: string[];\n credentials?: boolean;\n };\n path?: string;\n maxPayloadLength?: number;\n idleTimeout?: number;\n /**\n * Optional upgrade-time authentication hook (ws adapter). Return false to\n * reject the handshake. Runs after the CORS origin check passes.\n */\n verifyClient?: (info: { origin?: string; req: any; secure: boolean }) => boolean;\n [key: string]: any; // Allow adapter-specific options\n}\n\n/**\n * Abstract WebSocket adapter interface\n * Allows the framework to work with different WebSocket implementations\n */\nexport interface WebSocketAdapter {\n /**\n * Initialize the WebSocket server with the given HTTP server\n */\n initialize(httpServer: any, options?: WebSocketAdapterOptions): Promise<void>;\n\n /**\n * Create a namespace for organizing WebSocket connections\n */\n createNamespace(namespace: string): WebSocketNamespace;\n\n /**\n * Get the default namespace (usually '/')\n */\n getDefaultNamespace(): WebSocketNamespace;\n\n /**\n * Close the WebSocket server and all connections\n */\n close(): Promise<void>;\n\n /**\n * Set compression configuration\n */\n setCompression(enabled: boolean, options?: any): void;\n\n /**\n * Set custom ID generator for connections\n */\n setCustomIdGenerator(generator: () => string): void;\n\n /**\n * Get adapter name/type\n */\n getAdapterName(): string;\n\n /**\n * Get connection count across all namespaces\n */\n getConnectionCount(): number;\n}\n\n/**\n * WebSocket namespace interface\n * Represents a logical grouping of WebSocket connections\n */\nexport interface WebSocketNamespace {\n /**\n * Listen for connection events\n */\n on(event: 'connection', handler: (socket: WebSocketConnection) => void): void;\n\n /**\n * Emit event to all connected sockets in this namespace\n */\n emit(event: string, data: any): void;\n\n /**\n * Emit to specific room(s)\n */\n to(room: string | string[]): WebSocketEmitter;\n\n /**\n * Emit to sockets except those in specified room(s)\n */\n except(room: string | string[]): WebSocketEmitter;\n\n /**\n * Get all connected sockets\n */\n getSockets(): WebSocketConnection[];\n\n /**\n * Get connection count for this namespace\n */\n getConnectionCount(): number;\n\n /**\n * Use middleware for this namespace\n */\n use(middleware: (socket: WebSocketConnection, next: (err?: Error) => void) => void): void;\n}\n\n/**\n * WebSocket connection interface\n * Represents an individual client connection\n */\nexport interface WebSocketConnection {\n /** Unique connection ID */\n id: string;\n\n /** Client IP address */\n ip?: string | undefined;\n\n /** Connection headers */\n headers?: Record<string, string> | undefined;\n\n /** Custom data storage */\n data: Record<string, any>;\n\n /**\n * Listen for events from this socket\n */\n on(event: string, handler: (data: any, callback?: (response?: any) => void) => void): void;\n\n /**\n * Listen for any event from this socket\n */\n onAny(handler: (event: string, ...args: any[]) => void): void;\n\n /**\n * Emit event to this socket\n */\n emit(event: string, data: any): void;\n\n /**\n * Emit with compression\n */\n compressedEmit?(event: string, data: any): void;\n\n /**\n * Join a room\n */\n join(room: string | string[]): void;\n\n /**\n * Leave a room\n */\n leave(room: string | string[]): void;\n\n /**\n * Emit to specific room(s)\n */\n to(room: string | string[]): WebSocketEmitter;\n\n /**\n * Emit to all sockets except this one\n */\n broadcast: WebSocketEmitter;\n\n /**\n * Get rooms this socket has joined\n */\n getRooms(): Set<string>;\n\n /**\n * Disconnect this socket\n */\n disconnect(close?: boolean): void;\n\n /**\n * Check if socket is connected\n */\n connected: boolean;\n}\n\n/**\n * WebSocket emitter interface for chaining operations\n */\nexport interface WebSocketEmitter {\n /**\n * Emit to target sockets\n */\n emit(event: string, data: any): void;\n\n /**\n * Target specific room(s)\n */\n to(room: string | string[]): WebSocketEmitter;\n\n /**\n * Exclude specific room(s)\n */\n except(room: string | string[]): WebSocketEmitter;\n\n /**\n * Use compression for this emit\n */\n compress(compress: boolean): WebSocketEmitter;\n}\n\n/**\n * WebSocket middleware function type\n */\nexport type WebSocketMiddleware = (\n socket: WebSocketConnection,\n next: (err?: Error) => void\n) => void;\n\n/**\n * WebSocket event handler type\n */\nexport type WebSocketEventHandler = (\n socket: WebSocketConnection,\n data: any,\n callback?: (response?: any) => void\n) => void | Promise<void>;\n\n/**\n * Merge WebSocket config from moro.config.ts with per-call createApp() options.\n * createApp() options take precedence over config for top-level and nested keys,\n * so `options.path` overrides `config.options.path` and same for cors fields.\n * @internal\n */\nexport function mergeWebSocketConfig(cfg: any, opts: any): any {\n const c = cfg || {};\n const o = opts || {};\n const cOpts = c.options || {};\n const oOpts = o.options || {};\n return {\n ...c,\n ...o,\n options: {\n ...cOpts,\n ...oOpts,\n cors: { ...(cOpts.cors || {}), ...(oOpts.cors || {}) },\n },\n };\n}\n"]}
@@ -91,38 +91,17 @@ export class WebSocketManager {
91
91
  * Setup handlers for a specific WebSocket configuration
92
92
  */
93
93
  setupSocketHandlers(socket, wsConfig, moduleConfig) {
94
- socket.on(wsConfig.event, async (data, callback) => {
95
- const handlerKey = `${moduleConfig.name}.${wsConfig.handler}`;
96
- try {
97
- // Rate limiting
98
- if (wsConfig.rateLimit && !this.checkRateLimit(socket.id, handlerKey, wsConfig.rateLimit)) {
99
- const error = {
100
- success: false,
101
- error: 'Rate limit exceeded',
102
- code: 'RATE_LIMIT',
103
- };
104
- if (callback)
105
- callback(error);
106
- else
107
- socket.emit('error', error);
108
- return;
109
- }
110
- // Universal validation (works with any ValidationSchema)
111
- if (wsConfig.validation) {
112
- try {
113
- data = await wsConfig.validation.parseAsync(data);
114
- }
115
- catch (validationError) {
116
- // Handle universal validation errors
117
- const normalizedError = normalizeValidationError(validationError);
94
+ socket.on(wsConfig.event, (data, callback) => {
95
+ void (async () => {
96
+ const handlerKey = `${moduleConfig.name}.${wsConfig.handler}`;
97
+ try {
98
+ // Rate limiting
99
+ if (wsConfig.rateLimit &&
100
+ !this.checkRateLimit(socket.id, handlerKey, wsConfig.rateLimit)) {
118
101
  const error = {
119
102
  success: false,
120
- error: 'Validation failed',
121
- details: normalizedError.issues.map((issue) => ({
122
- field: issue.path.length > 0 ? issue.path.join('.') : 'data',
123
- message: issue.message,
124
- code: issue.code,
125
- })),
103
+ error: 'Rate limit exceeded',
104
+ code: 'RATE_LIMIT',
126
105
  };
127
106
  if (callback)
128
107
  callback(error);
@@ -130,45 +109,69 @@ export class WebSocketManager {
130
109
  socket.emit('error', error);
131
110
  return;
132
111
  }
112
+ // Universal validation (works with any ValidationSchema)
113
+ if (wsConfig.validation) {
114
+ try {
115
+ data = await wsConfig.validation.parseAsync(data);
116
+ }
117
+ catch (validationError) {
118
+ // Handle universal validation errors
119
+ const normalizedError = normalizeValidationError(validationError);
120
+ const error = {
121
+ success: false,
122
+ error: 'Validation failed',
123
+ details: normalizedError.issues.map((issue) => ({
124
+ field: issue.path.length > 0 ? issue.path.join('.') : 'data',
125
+ message: issue.message,
126
+ code: issue.code,
127
+ })),
128
+ };
129
+ if (callback)
130
+ callback(error);
131
+ else
132
+ socket.emit('error', error);
133
+ return;
134
+ }
135
+ }
136
+ // Circuit breaker protection
137
+ const circuitBreaker = this.getCircuitBreaker(handlerKey);
138
+ const result = await circuitBreaker.execute(async () => {
139
+ const controller = this.container.resolve(moduleConfig.name);
140
+ return await controller[wsConfig.handler](socket, data);
141
+ });
142
+ // Handle response
143
+ if (callback) {
144
+ callback({ success: true, data: result });
145
+ }
146
+ else if (result !== undefined) {
147
+ socket.emit(`${wsConfig.event}:response`, { success: true, data: result });
148
+ }
149
+ // Handle room operations
150
+ if (wsConfig.rooms) {
151
+ wsConfig.rooms.forEach(room => socket.join(room));
152
+ }
153
+ // Handle broadcasting
154
+ if (wsConfig.broadcast && result !== undefined) {
155
+ socket.broadcast.emit(wsConfig.event, { success: true, data: result });
156
+ }
133
157
  }
134
- // Circuit breaker protection
135
- const circuitBreaker = this.getCircuitBreaker(handlerKey);
136
- const result = await circuitBreaker.execute(async () => {
137
- const controller = this.container.resolve(moduleConfig.name);
138
- return await controller[wsConfig.handler](socket, data);
139
- });
140
- // Handle response
141
- if (callback) {
142
- callback({ success: true, data: result });
143
- }
144
- else if (result !== undefined) {
145
- socket.emit(`${wsConfig.event}:response`, { success: true, data: result });
146
- }
147
- // Handle room operations
148
- if (wsConfig.rooms) {
149
- wsConfig.rooms.forEach(room => socket.join(room));
150
- }
151
- // Handle broadcasting
152
- if (wsConfig.broadcast && result !== undefined) {
153
- socket.broadcast.emit(wsConfig.event, { success: true, data: result });
158
+ catch (error) {
159
+ this.logger.error('WebSocket handler error', 'HandlerError', {
160
+ handler: handlerKey,
161
+ error: error instanceof Error ? error.message : String(error),
162
+ socketId: socket.id,
163
+ });
164
+ const errorResponse = {
165
+ success: false,
166
+ error: 'Internal server error',
167
+ code: 'HANDLER_ERROR',
168
+ };
169
+ if (callback)
170
+ callback(errorResponse);
171
+ else
172
+ socket.emit('error', errorResponse);
154
173
  }
155
- }
156
- catch (error) {
157
- this.logger.error('WebSocket handler error', 'HandlerError', {
158
- handler: handlerKey,
159
- error: error instanceof Error ? error.message : String(error),
160
- socketId: socket.id,
161
- });
162
- const errorResponse = {
163
- success: false,
164
- error: 'Internal server error',
165
- code: 'HANDLER_ERROR',
166
- };
167
- if (callback)
168
- callback(errorResponse);
169
- else
170
- socket.emit('error', errorResponse);
171
- }
174
+ })();
172
175
  });
173
176
  }
174
177
  /**