@morojs/moro 1.7.30 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/README.md +89 -46
  2. package/dist/core/auth/morojs-adapter.js +95 -45
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.js.map +1 -1
  5. package/dist/core/config/config-sources.js +119 -48
  6. package/dist/core/config/config-sources.js.map +1 -1
  7. package/dist/core/config/config-validator.js +189 -8
  8. package/dist/core/config/config-validator.js.map +1 -1
  9. package/dist/core/config/file-loader.js.map +1 -1
  10. package/dist/core/config/index.js.map +1 -1
  11. package/dist/core/config/schema.js +35 -4
  12. package/dist/core/config/schema.js.map +1 -1
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.js +2 -2
  15. package/dist/core/database/adapters/drizzle.js.map +1 -1
  16. package/dist/core/database/adapters/index.js.map +1 -1
  17. package/dist/core/database/adapters/mongodb.d.ts +1 -0
  18. package/dist/core/database/adapters/mongodb.js +16 -0
  19. package/dist/core/database/adapters/mongodb.js.map +1 -1
  20. package/dist/core/database/adapters/mysql.d.ts +1 -0
  21. package/dist/core/database/adapters/mysql.js +13 -2
  22. package/dist/core/database/adapters/mysql.js.map +1 -1
  23. package/dist/core/database/adapters/postgresql.js +2 -2
  24. package/dist/core/database/adapters/postgresql.js.map +1 -1
  25. package/dist/core/database/adapters/redis.js.map +1 -1
  26. package/dist/core/database/adapters/sql-safety.js +5 -4
  27. package/dist/core/database/adapters/sql-safety.js.map +1 -1
  28. package/dist/core/database/adapters/sqlite.js.map +1 -1
  29. package/dist/core/database/index.js.map +1 -1
  30. package/dist/core/docs/index.js +11 -7
  31. package/dist/core/docs/index.js.map +1 -1
  32. package/dist/core/docs/openapi-generator.js +8 -6
  33. package/dist/core/docs/openapi-generator.js.map +1 -1
  34. package/dist/core/docs/schema-to-openapi.js +3 -3
  35. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  36. package/dist/core/docs/simple-docs.js.map +1 -1
  37. package/dist/core/docs/swagger-ui.js.map +1 -1
  38. package/dist/core/docs/zod-to-openapi.js +2 -2
  39. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  40. package/dist/core/events/event-bus.js +14 -5
  41. package/dist/core/events/event-bus.js.map +1 -1
  42. package/dist/core/events/index.js.map +1 -1
  43. package/dist/core/framework.d.ts +41 -3
  44. package/dist/core/framework.js +342 -95
  45. package/dist/core/framework.js.map +1 -1
  46. package/dist/core/graphql/adapter.js.map +1 -1
  47. package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -1
  48. package/dist/core/graphql/core.js.map +1 -1
  49. package/dist/core/graphql/index.js.map +1 -1
  50. package/dist/core/graphql/loader.js.map +1 -1
  51. package/dist/core/graphql/types.js.map +1 -1
  52. package/dist/core/grpc/adapters/grpc-js-adapter.js +4 -0
  53. package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -1
  54. package/dist/core/grpc/adapters/index.js.map +1 -1
  55. package/dist/core/grpc/grpc-adapter.js.map +1 -1
  56. package/dist/core/grpc/grpc-manager.js.map +1 -1
  57. package/dist/core/grpc/index.js.map +1 -1
  58. package/dist/core/grpc/middleware/auth.js +1 -1
  59. package/dist/core/grpc/middleware/auth.js.map +1 -1
  60. package/dist/core/grpc/middleware/logging.js.map +1 -1
  61. package/dist/core/grpc/middleware/validation.js +1 -1
  62. package/dist/core/grpc/middleware/validation.js.map +1 -1
  63. package/dist/core/grpc/types.d.ts +7 -7
  64. package/dist/core/grpc/types.js.map +1 -1
  65. package/dist/core/http/http-server.d.ts +17 -23
  66. package/dist/core/http/http-server.js +109 -249
  67. package/dist/core/http/http-server.js.map +1 -1
  68. package/dist/core/http/http2-server.d.ts +6 -16
  69. package/dist/core/http/http2-server.js +40 -83
  70. package/dist/core/http/http2-server.js.map +1 -1
  71. package/dist/core/http/index.d.ts +1 -0
  72. package/dist/core/http/index.js +3 -0
  73. package/dist/core/http/index.js.map +1 -1
  74. package/dist/core/http/moro-engine-server.d.ts +263 -0
  75. package/dist/core/http/moro-engine-server.js +1962 -0
  76. package/dist/core/http/moro-engine-server.js.map +1 -0
  77. package/dist/core/http/utils/compression.d.ts +47 -0
  78. package/dist/core/http/utils/compression.js +132 -0
  79. package/dist/core/http/utils/compression.js.map +1 -0
  80. package/dist/core/http/utils/lazy-event-emitter.d.ts +11 -0
  81. package/dist/core/http/utils/lazy-event-emitter.js +69 -0
  82. package/dist/core/http/utils/lazy-event-emitter.js.map +1 -0
  83. package/dist/core/http/utils/multipart-parser.d.ts +32 -0
  84. package/dist/core/http/utils/multipart-parser.js +215 -0
  85. package/dist/core/http/utils/multipart-parser.js.map +1 -0
  86. package/dist/core/http/utils/query-parser.d.ts +1 -0
  87. package/dist/core/http/utils/query-parser.js +44 -0
  88. package/dist/core/http/utils/query-parser.js.map +1 -0
  89. package/dist/core/http/utils/size.d.ts +33 -0
  90. package/dist/core/http/utils/size.js +37 -0
  91. package/dist/core/http/utils/size.js.map +1 -0
  92. package/dist/core/http/utils/ssl-config.d.ts +69 -0
  93. package/dist/core/http/utils/ssl-config.js +116 -0
  94. package/dist/core/http/utils/ssl-config.js.map +1 -0
  95. package/dist/core/http/utils/uws-worker-clustering.js +45 -32
  96. package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
  97. package/dist/core/http/uws-http-server.d.ts +25 -3
  98. package/dist/core/http/uws-http-server.js +465 -86
  99. package/dist/core/http/uws-http-server.js.map +1 -1
  100. package/dist/core/jobs/cron-parser.js +7 -5
  101. package/dist/core/jobs/cron-parser.js.map +1 -1
  102. package/dist/core/jobs/index.js.map +1 -1
  103. package/dist/core/jobs/job-executor.d.ts +1 -1
  104. package/dist/core/jobs/job-executor.js.map +1 -1
  105. package/dist/core/jobs/job-scheduler.d.ts +3 -3
  106. package/dist/core/jobs/job-scheduler.js.map +1 -1
  107. package/dist/core/jobs/job-state-manager.d.ts +3 -3
  108. package/dist/core/jobs/job-state-manager.js +25 -4
  109. package/dist/core/jobs/job-state-manager.js.map +1 -1
  110. package/dist/core/jobs/leader-election.d.ts +15 -0
  111. package/dist/core/jobs/leader-election.js +158 -69
  112. package/dist/core/jobs/leader-election.js.map +1 -1
  113. package/dist/core/jobs/types.d.ts +4 -4
  114. package/dist/core/jobs/types.js.map +1 -1
  115. package/dist/core/jobs/utils.d.ts +1 -1
  116. package/dist/core/jobs/utils.js +7 -3
  117. package/dist/core/jobs/utils.js.map +1 -1
  118. package/dist/core/logger/filters.js +3 -2
  119. package/dist/core/logger/filters.js.map +1 -1
  120. package/dist/core/logger/index.js.map +1 -1
  121. package/dist/core/logger/logger.js +56 -25
  122. package/dist/core/logger/logger.js.map +1 -1
  123. package/dist/core/logger/outputs.js.map +1 -1
  124. package/dist/core/mail/adapters/console-adapter.js.map +1 -1
  125. package/dist/core/mail/adapters/index.js.map +1 -1
  126. package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -1
  127. package/dist/core/mail/adapters/resend-adapter.js.map +1 -1
  128. package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -1
  129. package/dist/core/mail/adapters/ses-adapter.js.map +1 -1
  130. package/dist/core/mail/index.js.map +1 -1
  131. package/dist/core/mail/mail-adapter.js.map +1 -1
  132. package/dist/core/mail/mail-manager.d.ts +10 -0
  133. package/dist/core/mail/mail-manager.js +21 -5
  134. package/dist/core/mail/mail-manager.js.map +1 -1
  135. package/dist/core/mail/template-engine.js.map +1 -1
  136. package/dist/core/mail/types.js.map +1 -1
  137. package/dist/core/middleware/built-in/auth/core.js +3 -3
  138. package/dist/core/middleware/built-in/auth/core.js.map +1 -1
  139. package/dist/core/middleware/built-in/auth/helpers.js +4 -4
  140. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
  141. package/dist/core/middleware/built-in/auth/hook.js.map +1 -1
  142. package/dist/core/middleware/built-in/auth/index.js.map +1 -1
  143. package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +4 -4
  144. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
  145. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -1
  146. package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
  147. package/dist/core/middleware/built-in/body-parsers/index.js.map +1 -1
  148. package/dist/core/middleware/built-in/body-size/core.js +2 -2
  149. package/dist/core/middleware/built-in/body-size/core.js.map +1 -1
  150. package/dist/core/middleware/built-in/body-size/hook.js.map +1 -1
  151. package/dist/core/middleware/built-in/body-size/index.js.map +1 -1
  152. package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -1
  153. package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -1
  154. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
  155. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -1
  156. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
  157. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
  158. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -1
  159. package/dist/core/middleware/built-in/cache/core.js.map +1 -1
  160. package/dist/core/middleware/built-in/cache/hook.js +3 -3
  161. package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
  162. package/dist/core/middleware/built-in/cache/index.js.map +1 -1
  163. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -1
  164. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
  165. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
  166. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
  167. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -1
  168. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -1
  169. package/dist/core/middleware/built-in/cdn/core.js.map +1 -1
  170. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -1
  171. package/dist/core/middleware/built-in/cdn/index.js.map +1 -1
  172. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -1
  173. package/dist/core/middleware/built-in/compression/core.d.ts +3 -0
  174. package/dist/core/middleware/built-in/compression/core.js +28 -34
  175. package/dist/core/middleware/built-in/compression/core.js.map +1 -1
  176. package/dist/core/middleware/built-in/compression/hook.js.map +1 -1
  177. package/dist/core/middleware/built-in/compression/index.js.map +1 -1
  178. package/dist/core/middleware/built-in/compression/middleware.js.map +1 -1
  179. package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
  180. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
  181. package/dist/core/middleware/built-in/cookie/index.js.map +1 -1
  182. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -1
  183. package/dist/core/middleware/built-in/cors/core.js.map +1 -1
  184. package/dist/core/middleware/built-in/cors/hook.js.map +1 -1
  185. package/dist/core/middleware/built-in/cors/index.js.map +1 -1
  186. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -1
  187. package/dist/core/middleware/built-in/csp/core.js.map +1 -1
  188. package/dist/core/middleware/built-in/csp/hook.js.map +1 -1
  189. package/dist/core/middleware/built-in/csp/index.js.map +1 -1
  190. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -1
  191. package/dist/core/middleware/built-in/csrf/core.js +1 -1
  192. package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
  193. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -1
  194. package/dist/core/middleware/built-in/csrf/index.js.map +1 -1
  195. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -1
  196. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -1
  197. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -1
  198. package/dist/core/middleware/built-in/graphql/core.js.map +1 -1
  199. package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -1
  200. package/dist/core/middleware/built-in/graphql/hook.js.map +1 -1
  201. package/dist/core/middleware/built-in/graphql/index.js.map +1 -1
  202. package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -1
  203. package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -1
  204. package/dist/core/middleware/built-in/helmet/core.js.map +1 -1
  205. package/dist/core/middleware/built-in/helmet/hook.js.map +1 -1
  206. package/dist/core/middleware/built-in/helmet/index.js.map +1 -1
  207. package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -1
  208. package/dist/core/middleware/built-in/http2/core.js.map +1 -1
  209. package/dist/core/middleware/built-in/http2/hook.js.map +1 -1
  210. package/dist/core/middleware/built-in/http2/index.js.map +1 -1
  211. package/dist/core/middleware/built-in/http2/middleware.js.map +1 -1
  212. package/dist/core/middleware/built-in/index.js.map +1 -1
  213. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -1
  214. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -1
  215. package/dist/core/middleware/built-in/range/core.js +4 -1
  216. package/dist/core/middleware/built-in/range/core.js.map +1 -1
  217. package/dist/core/middleware/built-in/range/hook.js.map +1 -1
  218. package/dist/core/middleware/built-in/range/index.js.map +1 -1
  219. package/dist/core/middleware/built-in/range/middleware.js.map +1 -1
  220. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
  221. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -1
  222. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -1
  223. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -1
  224. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -1
  225. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -1
  226. package/dist/core/middleware/built-in/session/core.js +4 -4
  227. package/dist/core/middleware/built-in/session/core.js.map +1 -1
  228. package/dist/core/middleware/built-in/session/hook.js.map +1 -1
  229. package/dist/core/middleware/built-in/session/index.js.map +1 -1
  230. package/dist/core/middleware/built-in/session/middleware.js.map +1 -1
  231. package/dist/core/middleware/built-in/sse/core.js.map +1 -1
  232. package/dist/core/middleware/built-in/sse/hook.js.map +1 -1
  233. package/dist/core/middleware/built-in/sse/index.js.map +1 -1
  234. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -1
  235. package/dist/core/middleware/built-in/static/core.js.map +1 -1
  236. package/dist/core/middleware/built-in/static/hook.js.map +1 -1
  237. package/dist/core/middleware/built-in/static/index.js.map +1 -1
  238. package/dist/core/middleware/built-in/static/middleware.js.map +1 -1
  239. package/dist/core/middleware/built-in/template/core.js +1 -1
  240. package/dist/core/middleware/built-in/template/core.js.map +1 -1
  241. package/dist/core/middleware/built-in/template/hook.js.map +1 -1
  242. package/dist/core/middleware/built-in/template/index.js.map +1 -1
  243. package/dist/core/middleware/built-in/template/middleware.js.map +1 -1
  244. package/dist/core/middleware/built-in/upload/core.js.map +1 -1
  245. package/dist/core/middleware/built-in/upload/hook.js.map +1 -1
  246. package/dist/core/middleware/built-in/upload/index.js.map +1 -1
  247. package/dist/core/middleware/built-in/upload/middleware.js.map +1 -1
  248. package/dist/core/middleware/built-in/validation/core.js.map +1 -1
  249. package/dist/core/middleware/built-in/validation/hook.js.map +1 -1
  250. package/dist/core/middleware/built-in/validation/index.js.map +1 -1
  251. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
  252. package/dist/core/middleware/index.js +2 -2
  253. package/dist/core/middleware/index.js.map +1 -1
  254. package/dist/core/modules/auto-discovery.js +11 -7
  255. package/dist/core/modules/auto-discovery.js.map +1 -1
  256. package/dist/core/modules/index.js.map +1 -1
  257. package/dist/core/modules/modules.js +18 -13
  258. package/dist/core/modules/modules.js.map +1 -1
  259. package/dist/core/networking/adapters/engine-adapter.d.ts +23 -0
  260. package/dist/core/networking/adapters/engine-adapter.js +365 -0
  261. package/dist/core/networking/adapters/engine-adapter.js.map +1 -0
  262. package/dist/core/networking/adapters/index.d.ts +1 -0
  263. package/dist/core/networking/adapters/index.js +1 -0
  264. package/dist/core/networking/adapters/index.js.map +1 -1
  265. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -0
  266. package/dist/core/networking/adapters/socketio-adapter.js +12 -1
  267. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  268. package/dist/core/networking/adapters/uws-adapter.js +27 -16
  269. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  270. package/dist/core/networking/adapters/ws-adapter.d.ts +15 -0
  271. package/dist/core/networking/adapters/ws-adapter.js +120 -6
  272. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  273. package/dist/core/networking/index.js.map +1 -1
  274. package/dist/core/networking/service-discovery.js +7 -5
  275. package/dist/core/networking/service-discovery.js.map +1 -1
  276. package/dist/core/networking/websocket-adapter.d.ts +22 -3
  277. package/dist/core/networking/websocket-adapter.js.map +1 -1
  278. package/dist/core/networking/websocket-manager.js +70 -67
  279. package/dist/core/networking/websocket-manager.js.map +1 -1
  280. package/dist/core/pooling/object-pool-manager.js +6 -0
  281. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  282. package/dist/core/queue/adapters/bull-adapter.js.map +1 -1
  283. package/dist/core/queue/adapters/index.js.map +1 -1
  284. package/dist/core/queue/adapters/kafka-adapter.js +2 -2
  285. package/dist/core/queue/adapters/kafka-adapter.js.map +1 -1
  286. package/dist/core/queue/adapters/memory-adapter.js +6 -6
  287. package/dist/core/queue/adapters/memory-adapter.js.map +1 -1
  288. package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +50 -0
  289. package/dist/core/queue/adapters/rabbitmq-adapter.js +176 -20
  290. package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -1
  291. package/dist/core/queue/adapters/sqs-adapter.d.ts +12 -2
  292. package/dist/core/queue/adapters/sqs-adapter.js +75 -24
  293. package/dist/core/queue/adapters/sqs-adapter.js.map +1 -1
  294. package/dist/core/queue/index.js.map +1 -1
  295. package/dist/core/queue/middleware/index.js.map +1 -1
  296. package/dist/core/queue/middleware/monitoring.d.ts +1 -1
  297. package/dist/core/queue/middleware/monitoring.js.map +1 -1
  298. package/dist/core/queue/middleware/priority.js +2 -1
  299. package/dist/core/queue/middleware/priority.js.map +1 -1
  300. package/dist/core/queue/middleware/rate-limit.js.map +1 -1
  301. package/dist/core/queue/queue-adapter.js.map +1 -1
  302. package/dist/core/queue/queue-manager.js.map +1 -1
  303. package/dist/core/queue/types.d.ts +8 -8
  304. package/dist/core/queue/types.js.map +1 -1
  305. package/dist/core/routing/app-integration.js.map +1 -1
  306. package/dist/core/routing/create-router.js.map +1 -1
  307. package/dist/core/routing/index.js.map +1 -1
  308. package/dist/core/routing/path-matcher.js.map +1 -1
  309. package/dist/core/routing/radix-tree.js.map +1 -1
  310. package/dist/core/routing/router.js.map +1 -1
  311. package/dist/core/routing/unified-router.js +12 -4
  312. package/dist/core/routing/unified-router.js.map +1 -1
  313. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  314. package/dist/core/runtime/base-adapter.js +2 -2
  315. package/dist/core/runtime/base-adapter.js.map +1 -1
  316. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -0
  317. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  318. package/dist/core/runtime/index.js.map +1 -1
  319. package/dist/core/runtime/node-adapter.js +19 -17
  320. package/dist/core/runtime/node-adapter.js.map +1 -1
  321. package/dist/core/runtime/vercel-edge-adapter.js +2 -0
  322. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  323. package/dist/core/utilities/circuit-breaker.d.ts +1 -0
  324. package/dist/core/utilities/circuit-breaker.js +25 -2
  325. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  326. package/dist/core/utilities/container.js +9 -9
  327. package/dist/core/utilities/container.js.map +1 -1
  328. package/dist/core/utilities/hooks.js +28 -6
  329. package/dist/core/utilities/hooks.js.map +1 -1
  330. package/dist/core/utilities/index.js.map +1 -1
  331. package/dist/core/utilities/module-path.js.map +1 -1
  332. package/dist/core/utilities/package-utils.d.ts +68 -0
  333. package/dist/core/utilities/package-utils.js +198 -1
  334. package/dist/core/utilities/package-utils.js.map +1 -1
  335. package/dist/core/utilities/response-helpers.js +1 -1
  336. package/dist/core/utilities/response-helpers.js.map +1 -1
  337. package/dist/core/validation/adapters.js.map +1 -1
  338. package/dist/core/validation/error-handler.js.map +1 -1
  339. package/dist/core/validation/index.js.map +1 -1
  340. package/dist/core/validation/schema-interface.js.map +1 -1
  341. package/dist/core/workers/facade.js.map +1 -1
  342. package/dist/core/workers/index.js.map +1 -1
  343. package/dist/core/workers/worker-entry.d.ts +1 -0
  344. package/dist/core/workers/worker-entry.js +12 -0
  345. package/dist/core/workers/worker-entry.js.map +1 -0
  346. package/dist/core/workers/worker-manager.d.ts +23 -2
  347. package/dist/core/workers/worker-manager.js +117 -17
  348. package/dist/core/workers/worker-manager.js.map +1 -1
  349. package/dist/core/workers/worker.js +8 -6
  350. package/dist/core/workers/worker.js.map +1 -1
  351. package/dist/index.d.ts +2 -2
  352. package/dist/index.js +5 -2
  353. package/dist/index.js.map +1 -1
  354. package/dist/moro.d.ts +20 -1
  355. package/dist/moro.js +230 -70
  356. package/dist/moro.js.map +1 -1
  357. package/dist/types/auth.d.ts +4 -4
  358. package/dist/types/auth.js.map +1 -1
  359. package/dist/types/cache.js.map +1 -1
  360. package/dist/types/cdn.js.map +1 -1
  361. package/dist/types/config.d.ts +100 -15
  362. package/dist/types/config.js.map +1 -1
  363. package/dist/types/core.js.map +1 -1
  364. package/dist/types/database.js.map +1 -1
  365. package/dist/types/discovery.js.map +1 -1
  366. package/dist/types/events.js.map +1 -1
  367. package/dist/types/hooks.js.map +1 -1
  368. package/dist/types/http.js.map +1 -1
  369. package/dist/types/logger.js.map +1 -1
  370. package/dist/types/module.js.map +1 -1
  371. package/dist/types/runtime.js.map +1 -1
  372. package/dist/types/session.js.map +1 -1
  373. package/package.json +32 -17
@@ -21,6 +21,13 @@ export class RabbitMQAdapter extends QueueAdapter {
21
21
  processors = new Map();
22
22
  jobStore = new Map();
23
23
  consumerTags = new Map();
24
+ // Concurrency (prefetch) per queue, retained so consumers can be replayed on reconnect
25
+ queueConcurrency = new Map();
26
+ isClosing = false;
27
+ reconnecting = false;
28
+ // Reconnect backoff bounds
29
+ static RECONNECT_BASE_DELAY_MS = 1000;
30
+ static RECONNECT_MAX_DELAY_MS = 30000;
24
31
  constructor(connectionConfig = {}) {
25
32
  super();
26
33
  this.connectionConfig = connectionConfig;
@@ -39,21 +46,164 @@ export class RabbitMQAdapter extends QueueAdapter {
39
46
  // Load amqplib
40
47
  const amqpPath = resolveUserPackage('amqplib');
41
48
  this.amqp = await import(amqpPath);
42
- // Build connection URL
43
- const host = this.connectionConfig.host || 'localhost';
44
- const port = this.connectionConfig.port || 5672;
45
- const username = this.connectionConfig.username || 'guest';
46
- const password = this.connectionConfig.password || 'guest';
47
- const url = `amqp://${username}:${password}@${host}:${port}`;
48
- // Create connection and channel
49
- this.connection = await this.amqp.connect(url);
50
- this.channel = await this.connection.createChannel();
49
+ // Create connection and channel (with error/close handlers attached)
50
+ await this.establishConnection();
51
51
  this.isReady = true;
52
52
  }
53
53
  catch (error) {
54
54
  throw new Error(`Failed to initialize RabbitMQ adapter: ${error instanceof Error ? error.message : String(error)}`);
55
55
  }
56
56
  }
57
+ /**
58
+ * Build the AMQP connection URL from config
59
+ */
60
+ buildConnectionUrl() {
61
+ const host = this.connectionConfig.host || 'localhost';
62
+ const port = this.connectionConfig.port || 5672;
63
+ const username = this.connectionConfig.username || 'guest';
64
+ const password = this.connectionConfig.password || 'guest';
65
+ return `amqp://${username}:${password}@${host}:${port}`;
66
+ }
67
+ /**
68
+ * Open a fresh connection + channel and register lifecycle handlers on both.
69
+ */
70
+ async establishConnection() {
71
+ const url = this.buildConnectionUrl();
72
+ this.connection = await this.amqp.connect(url);
73
+ this.registerConnectionHandlers(this.connection);
74
+ this.channel = await this.connection.createChannel();
75
+ this.registerChannelHandlers(this.channel);
76
+ }
77
+ /**
78
+ * Attach 'error'/'close' handlers to the connection. amqplib Connection is an
79
+ * EventEmitter, so an unhandled 'error' would otherwise crash the process.
80
+ */
81
+ registerConnectionHandlers(connection) {
82
+ connection.on('error', (err) => {
83
+ logger.error('RabbitMQ connection error', 'Connection', {
84
+ error: err instanceof Error ? err.message : String(err),
85
+ });
86
+ this.handleConnectionFailure();
87
+ });
88
+ connection.on('close', () => {
89
+ logger.warn('RabbitMQ connection closed', 'Connection');
90
+ this.handleConnectionFailure();
91
+ });
92
+ }
93
+ /**
94
+ * Attach 'error'/'close' handlers to the channel. amqplib Channel is an
95
+ * EventEmitter; an unhandled 'error' would otherwise crash the process.
96
+ */
97
+ registerChannelHandlers(channel) {
98
+ channel.on('error', (err) => {
99
+ logger.error('RabbitMQ channel error', 'Channel', {
100
+ error: err instanceof Error ? err.message : String(err),
101
+ });
102
+ this.handleConnectionFailure();
103
+ });
104
+ channel.on('close', () => {
105
+ logger.warn('RabbitMQ channel closed', 'Channel');
106
+ this.handleConnectionFailure();
107
+ });
108
+ }
109
+ /**
110
+ * React to a connection/channel error or close by marking the adapter not-ready
111
+ * and kicking off a single reconnect loop. Guarded so the many events a failure
112
+ * emits (connection error + close + channel error + close) trigger at most one
113
+ * reconnect at a time.
114
+ */
115
+ handleConnectionFailure() {
116
+ if (this.isClosing || this.reconnecting) {
117
+ return;
118
+ }
119
+ this.isReady = false;
120
+ this.reconnecting = true;
121
+ void this.reconnectWithBackoff();
122
+ }
123
+ /**
124
+ * Reconnect with exponential backoff, re-establishing the channel and replaying
125
+ * all registered consumers once connected.
126
+ */
127
+ async reconnectWithBackoff() {
128
+ await this.cleanupConnection();
129
+ let attempt = 0;
130
+ while (!this.isClosing) {
131
+ attempt++;
132
+ const delay = Math.min(RabbitMQAdapter.RECONNECT_BASE_DELAY_MS * 2 ** (attempt - 1), RabbitMQAdapter.RECONNECT_MAX_DELAY_MS);
133
+ logger.warn(`Reconnecting to RabbitMQ in ${delay}ms (attempt ${attempt})`, 'Reconnect');
134
+ await new Promise(resolve => {
135
+ const timer = setTimeout(resolve, delay);
136
+ timer.unref();
137
+ });
138
+ if (this.isClosing) {
139
+ break;
140
+ }
141
+ try {
142
+ await this.establishConnection();
143
+ this.isReady = true;
144
+ this.reconnecting = false;
145
+ logger.info('RabbitMQ reconnected', 'Reconnect');
146
+ await this.replayConsumers();
147
+ return;
148
+ }
149
+ catch (error) {
150
+ logger.error(`RabbitMQ reconnect attempt ${attempt} failed`, 'Reconnect', {
151
+ error: error instanceof Error ? error.message : String(error),
152
+ });
153
+ await this.cleanupConnection();
154
+ }
155
+ }
156
+ this.reconnecting = false;
157
+ }
158
+ /**
159
+ * Re-assert queues and re-register every consumer after a reconnect.
160
+ */
161
+ async replayConsumers() {
162
+ const queues = Array.from(this.processors.keys());
163
+ this.consumerTags.clear();
164
+ for (const queueName of queues) {
165
+ const handler = this.processors.get(queueName);
166
+ const concurrency = this.queueConcurrency.get(queueName) ?? 1;
167
+ if (!handler) {
168
+ continue;
169
+ }
170
+ try {
171
+ await this.registerConsumer(queueName, concurrency, handler);
172
+ }
173
+ catch (error) {
174
+ logger.error(`Failed to replay consumer for queue ${queueName}`, 'Reconnect', {
175
+ error: error instanceof Error ? error.message : String(error),
176
+ });
177
+ }
178
+ }
179
+ }
180
+ /**
181
+ * Best-effort close of the current channel + connection, clearing references.
182
+ * Handlers on the old objects are guarded by the reconnecting/isClosing flags,
183
+ * so the 'close' events these emit will not re-trigger another reconnect.
184
+ */
185
+ async cleanupConnection() {
186
+ const channel = this.channel;
187
+ const connection = this.connection;
188
+ this.channel = null;
189
+ this.connection = null;
190
+ if (channel) {
191
+ try {
192
+ await channel.close();
193
+ }
194
+ catch {
195
+ // ignore — channel may already be closed
196
+ }
197
+ }
198
+ if (connection) {
199
+ try {
200
+ await connection.close();
201
+ }
202
+ catch {
203
+ // ignore — connection may already be closed
204
+ }
205
+ }
206
+ }
57
207
  /**
58
208
  * Ensure queue exists in RabbitMQ
59
209
  */
@@ -150,6 +300,16 @@ export class RabbitMQAdapter extends QueueAdapter {
150
300
  this.ensureReady();
151
301
  await this.ensureQueueExists(queueName);
152
302
  this.processors.set(queueName, handler);
303
+ // Retain concurrency so the consumer can be replayed after a reconnect
304
+ this.queueConcurrency.set(queueName, concurrency);
305
+ await this.registerConsumer(queueName, concurrency, handler);
306
+ }
307
+ /**
308
+ * Assert the queue, set prefetch and start consuming. Shared by process() and by
309
+ * replayConsumers() so a reconnect re-establishes consumers identically.
310
+ */
311
+ async registerConsumer(queueName, concurrency, handler) {
312
+ await this.ensureQueueExists(queueName);
153
313
  // Set prefetch count (concurrency)
154
314
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
155
315
  await this.channel.prefetch(concurrency);
@@ -391,27 +551,23 @@ export class RabbitMQAdapter extends QueueAdapter {
391
551
  // Clear job store
392
552
  this.jobStore.delete(queueName);
393
553
  this.processors.delete(queueName);
554
+ this.queueConcurrency.delete(queueName);
394
555
  }
395
556
  /**
396
557
  * Close the adapter
397
558
  */
398
559
  async close() {
560
+ // Signal intentional shutdown so lifecycle handlers don't trigger a reconnect
561
+ this.isClosing = true;
399
562
  // Cancel all consumers
400
- for (const queueName of this.consumerTags.keys()) {
563
+ for (const queueName of Array.from(this.consumerTags.keys())) {
401
564
  await this.pauseQueue(queueName);
402
565
  }
403
- // Close channel
404
- if (this.channel) {
405
- await this.channel.close();
406
- this.channel = null;
407
- }
408
- // Close connection
409
- if (this.connection) {
410
- await this.connection.close();
411
- this.connection = null;
412
- }
566
+ // Close channel + connection (best-effort)
567
+ await this.cleanupConnection();
413
568
  this.jobStore.clear();
414
569
  this.processors.clear();
570
+ this.queueConcurrency.clear();
415
571
  this.isReady = false;
416
572
  }
417
573
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-adapter.js","sourceRoot":"","sources":["../../../../src/core/queue/adapters/rabbitmq-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rabbitmq-adapter.js","sourceRoot":"","sources":["../../../../src/core/queue/adapters/rabbitmq-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RabbitMQ Queue Adapter\n * Adapter for RabbitMQ/AMQP message broker\n * Uses lazy loading for optional dependencies\n */\n\nimport { QueueAdapter } from '../queue-adapter.js';\nimport type {\n Job,\n JobOptions,\n JobHandler,\n JobStatus,\n QueueMetrics,\n BulkJobData,\n QueueConnectionConfig,\n JobContext,\n} from '../types.js';\nimport { isPackageAvailable, resolveUserPackage } from '../../utilities/package-utils.js';\nimport { randomUUID } from 'crypto';\nimport { createFrameworkLogger } from '../../logger/index.js';\n\nconst logger = createFrameworkLogger('RabbitMQQueue');\n\n/**\n * Type definitions for amqplib (loaded dynamically)\n */\ntype AMQPConnection = any;\ntype AMQPChannel = any;\n\n/**\n * Stored job data\n */\ninterface StoredJob {\n id: string;\n name: string;\n data: any;\n options: JobOptions;\n attemptsMade: number;\n timestamp: number;\n processedOn?: number | undefined;\n finishedOn?: number | undefined;\n failedReason?: string | undefined;\n progress: number;\n}\n\n/**\n * RabbitMQ adapter for AMQP-based queues\n * Suitable for complex routing and pub/sub patterns\n */\nexport class RabbitMQAdapter extends QueueAdapter {\n public name = 'rabbitmq';\n\n private amqp: any = null;\n private connection: AMQPConnection | null = null;\n private channel: AMQPChannel | null = null;\n private connectionConfig: QueueConnectionConfig;\n private processors: Map<string, JobHandler<any, any>> = new Map();\n private jobStore: Map<string, Map<string, StoredJob>> = new Map();\n private consumerTags: Map<string, string> = new Map();\n // Concurrency (prefetch) per queue, retained so consumers can be replayed on reconnect\n private queueConcurrency: Map<string, number> = new Map();\n private isClosing = false;\n private reconnecting = false;\n\n // Reconnect backoff bounds\n private static readonly RECONNECT_BASE_DELAY_MS = 1000;\n private static readonly RECONNECT_MAX_DELAY_MS = 30000;\n\n constructor(connectionConfig: QueueConnectionConfig = {}) {\n super();\n this.connectionConfig = connectionConfig;\n }\n\n /**\n * Initialize the RabbitMQ adapter\n */\n async initialize(): Promise<void> {\n if (this.isReady) {\n return;\n }\n\n if (!isPackageAvailable('amqplib')) {\n throw new Error('amqplib is not installed. Install it with: npm install amqplib');\n }\n\n try {\n // Load amqplib\n const amqpPath = resolveUserPackage('amqplib');\n this.amqp = await import(amqpPath);\n\n // Create connection and channel (with error/close handlers attached)\n await this.establishConnection();\n\n this.isReady = true;\n } catch (error) {\n throw new Error(\n `Failed to initialize RabbitMQ adapter: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Build the AMQP connection URL from config\n */\n private buildConnectionUrl(): string {\n const host = this.connectionConfig.host || 'localhost';\n const port = this.connectionConfig.port || 5672;\n const username = this.connectionConfig.username || 'guest';\n const password = this.connectionConfig.password || 'guest';\n return `amqp://${username}:${password}@${host}:${port}`;\n }\n\n /**\n * Open a fresh connection + channel and register lifecycle handlers on both.\n */\n private async establishConnection(): Promise<void> {\n const url = this.buildConnectionUrl();\n\n this.connection = await this.amqp.connect(url);\n this.registerConnectionHandlers(this.connection);\n\n this.channel = await this.connection.createChannel();\n this.registerChannelHandlers(this.channel);\n }\n\n /**\n * Attach 'error'/'close' handlers to the connection. amqplib Connection is an\n * EventEmitter, so an unhandled 'error' would otherwise crash the process.\n */\n private registerConnectionHandlers(connection: AMQPConnection): void {\n connection.on('error', (err: Error) => {\n logger.error('RabbitMQ connection error', 'Connection', {\n error: err instanceof Error ? err.message : String(err),\n });\n this.handleConnectionFailure();\n });\n\n connection.on('close', () => {\n logger.warn('RabbitMQ connection closed', 'Connection');\n this.handleConnectionFailure();\n });\n }\n\n /**\n * Attach 'error'/'close' handlers to the channel. amqplib Channel is an\n * EventEmitter; an unhandled 'error' would otherwise crash the process.\n */\n private registerChannelHandlers(channel: AMQPChannel): void {\n channel.on('error', (err: Error) => {\n logger.error('RabbitMQ channel error', 'Channel', {\n error: err instanceof Error ? err.message : String(err),\n });\n this.handleConnectionFailure();\n });\n\n channel.on('close', () => {\n logger.warn('RabbitMQ channel closed', 'Channel');\n this.handleConnectionFailure();\n });\n }\n\n /**\n * React to a connection/channel error or close by marking the adapter not-ready\n * and kicking off a single reconnect loop. Guarded so the many events a failure\n * emits (connection error + close + channel error + close) trigger at most one\n * reconnect at a time.\n */\n private handleConnectionFailure(): void {\n if (this.isClosing || this.reconnecting) {\n return;\n }\n\n this.isReady = false;\n this.reconnecting = true;\n void this.reconnectWithBackoff();\n }\n\n /**\n * Reconnect with exponential backoff, re-establishing the channel and replaying\n * all registered consumers once connected.\n */\n private async reconnectWithBackoff(): Promise<void> {\n await this.cleanupConnection();\n\n let attempt = 0;\n while (!this.isClosing) {\n attempt++;\n const delay = Math.min(\n RabbitMQAdapter.RECONNECT_BASE_DELAY_MS * 2 ** (attempt - 1),\n RabbitMQAdapter.RECONNECT_MAX_DELAY_MS\n );\n\n logger.warn(`Reconnecting to RabbitMQ in ${delay}ms (attempt ${attempt})`, 'Reconnect');\n await new Promise<void>(resolve => {\n const timer = setTimeout(resolve, delay);\n timer.unref();\n });\n\n if (this.isClosing) {\n break;\n }\n\n try {\n await this.establishConnection();\n this.isReady = true;\n this.reconnecting = false;\n logger.info('RabbitMQ reconnected', 'Reconnect');\n await this.replayConsumers();\n return;\n } catch (error) {\n logger.error(`RabbitMQ reconnect attempt ${attempt} failed`, 'Reconnect', {\n error: error instanceof Error ? error.message : String(error),\n });\n await this.cleanupConnection();\n }\n }\n\n this.reconnecting = false;\n }\n\n /**\n * Re-assert queues and re-register every consumer after a reconnect.\n */\n private async replayConsumers(): Promise<void> {\n const queues = Array.from(this.processors.keys());\n this.consumerTags.clear();\n\n for (const queueName of queues) {\n const handler = this.processors.get(queueName);\n const concurrency = this.queueConcurrency.get(queueName) ?? 1;\n if (!handler) {\n continue;\n }\n try {\n await this.registerConsumer(queueName, concurrency, handler);\n } catch (error) {\n logger.error(`Failed to replay consumer for queue ${queueName}`, 'Reconnect', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n /**\n * Best-effort close of the current channel + connection, clearing references.\n * Handlers on the old objects are guarded by the reconnecting/isClosing flags,\n * so the 'close' events these emit will not re-trigger another reconnect.\n */\n private async cleanupConnection(): Promise<void> {\n const channel = this.channel;\n const connection = this.connection;\n this.channel = null;\n this.connection = null;\n\n if (channel) {\n try {\n await channel.close();\n } catch {\n // ignore — channel may already be closed\n }\n }\n if (connection) {\n try {\n await connection.close();\n } catch {\n // ignore — connection may already be closed\n }\n }\n }\n\n /**\n * Ensure queue exists in RabbitMQ\n */\n private async ensureQueueExists(queueName: string): Promise<void> {\n if (!this.channel) {\n throw new Error('Channel not initialized');\n }\n\n await this.channel.assertQueue(queueName, {\n durable: true,\n arguments: {},\n });\n\n if (!this.jobStore.has(queueName)) {\n this.jobStore.set(queueName, new Map());\n }\n }\n\n /**\n * Add a job to the queue\n */\n async addJob<T = any>(queueName: string, data: T, options: JobOptions = {}): Promise<Job<T>> {\n this.ensureReady();\n await this.ensureQueueExists(queueName);\n\n const jobId = options.jobId || randomUUID();\n const job: StoredJob = {\n id: jobId,\n name: queueName,\n data,\n options,\n attemptsMade: 0,\n timestamp: Date.now(),\n progress: 0,\n };\n\n // Store job metadata\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.jobStore.get(queueName)!.set(jobId, job);\n\n // Prepare message\n const message = {\n jobId,\n data,\n options,\n timestamp: job.timestamp,\n };\n\n const messageBuffer = Buffer.from(JSON.stringify(message));\n\n // Send to RabbitMQ with options\n const sendOptions: any = {\n persistent: true,\n priority: options.priority || 0,\n messageId: jobId,\n };\n\n if (options.delay && options.delay > 0) {\n // Use dead letter exchange for delayed messages\n const delayQueue = `${queueName}.delay`;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n await this.channel!.assertQueue(delayQueue, {\n durable: true,\n arguments: {\n 'x-dead-letter-exchange': '',\n 'x-dead-letter-routing-key': queueName,\n 'x-message-ttl': options.delay,\n },\n });\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.sendToQueue(delayQueue, messageBuffer, sendOptions);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.sendToQueue(queueName, messageBuffer, sendOptions);\n }\n\n return {\n id: job.id,\n name: job.name,\n data: job.data,\n progress: job.progress,\n attemptsMade: job.attemptsMade,\n timestamp: job.timestamp,\n opts: job.options,\n };\n }\n\n /**\n * Add multiple jobs in bulk\n */\n async addBulkJobs<T = any>(queueName: string, jobs: BulkJobData<T>[]): Promise<Job<T>[]> {\n this.ensureReady();\n\n const addedJobs: Job<T>[] = [];\n for (const jobData of jobs) {\n const job = await this.addJob(queueName, jobData.data, jobData.options);\n addedJobs.push(job);\n }\n\n return addedJobs;\n }\n\n /**\n * Register a job processor\n */\n async process<T = any, R = any>(\n queueName: string,\n concurrency: number,\n handler: JobHandler<T, R>\n ): Promise<void> {\n this.ensureReady();\n await this.ensureQueueExists(queueName);\n\n this.processors.set(queueName, handler);\n // Retain concurrency so the consumer can be replayed after a reconnect\n this.queueConcurrency.set(queueName, concurrency);\n\n await this.registerConsumer(queueName, concurrency, handler);\n }\n\n /**\n * Assert the queue, set prefetch and start consuming. Shared by process() and by\n * replayConsumers() so a reconnect re-establishes consumers identically.\n */\n private async registerConsumer(\n queueName: string,\n concurrency: number,\n handler: JobHandler<any, any>\n ): Promise<void> {\n await this.ensureQueueExists(queueName);\n\n // Set prefetch count (concurrency)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n await this.channel!.prefetch(concurrency);\n\n // Start consuming messages\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const consumer = await this.channel!.consume(\n queueName,\n async (msg: any) => {\n if (!msg) {\n return;\n }\n\n try {\n const message = JSON.parse(msg.content.toString());\n const { jobId, data, options } = message;\n\n const storedJob = this.jobStore.get(queueName)?.get(jobId);\n if (!storedJob) {\n // Job not found, acknowledge and skip\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.ack(msg);\n return;\n }\n\n storedJob.processedOn = Date.now();\n\n // Create job context\n const jobContext: JobContext = {\n id: jobId,\n name: queueName,\n data,\n progress: storedJob.progress,\n attemptsMade: storedJob.attemptsMade,\n timestamp: storedJob.timestamp,\n processedOn: storedJob.processedOn,\n finishedOn: storedJob.finishedOn,\n failedReason: storedJob.failedReason,\n opts: options,\n updateProgress: async (progress: number) => {\n storedJob.progress = progress;\n },\n log: (message: string) => {\n logger.debug(`[Job ${jobId}] ${message}`);\n },\n };\n\n // Execute handler\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const result = await handler(jobContext);\n\n // Mark as completed\n storedJob.finishedOn = Date.now();\n storedJob.progress = 100;\n\n // Acknowledge message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.ack(msg);\n\n // Auto-remove if configured\n if (options.removeOnComplete) {\n setTimeout(\n () => {\n this.jobStore.get(queueName)?.delete(jobId);\n },\n typeof options.removeOnComplete === 'number' ? options.removeOnComplete : 0\n );\n }\n } catch (error) {\n const message = JSON.parse(msg.content.toString());\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { jobId, data, options } = message;\n\n const storedJob = this.jobStore.get(queueName)?.get(jobId);\n if (storedJob) {\n storedJob.attemptsMade++;\n storedJob.failedReason = error instanceof Error ? error.message : String(error);\n storedJob.finishedOn = Date.now();\n\n // Check if we should retry\n const maxAttempts = options.attempts || 1;\n if (storedJob.attemptsMade < maxAttempts) {\n // Reject and requeue\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.nack(msg, false, true);\n } else {\n // Max attempts reached, move to DLQ or acknowledge\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.ack(msg);\n\n // Auto-remove if configured\n if (options.removeOnFail) {\n setTimeout(\n () => {\n this.jobStore.get(queueName)?.delete(jobId);\n },\n typeof options.removeOnFail === 'number' ? options.removeOnFail : 0\n );\n }\n }\n } else {\n // Job not found, acknowledge\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.ack(msg);\n }\n }\n },\n { noAck: false }\n );\n\n this.consumerTags.set(queueName, consumer.consumerTag);\n }\n\n /**\n * Get a job by ID\n */\n async getJob(queueName: string, jobId: string): Promise<Job | null> {\n this.ensureReady();\n\n const storedJob = this.jobStore.get(queueName)?.get(jobId);\n if (!storedJob) {\n return null;\n }\n\n return {\n id: storedJob.id,\n name: storedJob.name,\n data: storedJob.data,\n progress: storedJob.progress,\n attemptsMade: storedJob.attemptsMade,\n timestamp: storedJob.timestamp,\n processedOn: storedJob.processedOn,\n finishedOn: storedJob.finishedOn,\n failedReason: storedJob.failedReason,\n opts: storedJob.options,\n };\n }\n\n /**\n * Get jobs by status\n */\n async getJobs(\n queueName: string,\n status?: JobStatus,\n start: number = 0,\n end: number = -1\n ): Promise<Job[]> {\n this.ensureReady();\n\n const jobs = Array.from(this.jobStore.get(queueName)?.values() || []);\n\n // Filter by status if provided\n const filteredJobs = status ? jobs.filter(job => this.getJobStatus(job) === status) : jobs;\n\n // Apply pagination\n const endIndex = end === -1 ? filteredJobs.length : end + 1;\n return filteredJobs.slice(start, endIndex).map(job => ({\n id: job.id,\n name: job.name,\n data: job.data,\n progress: job.progress,\n attemptsMade: job.attemptsMade,\n timestamp: job.timestamp,\n processedOn: job.processedOn,\n finishedOn: job.finishedOn,\n failedReason: job.failedReason,\n opts: job.options,\n }));\n }\n\n /**\n * Remove a job\n */\n async removeJob(queueName: string, jobId: string): Promise<void> {\n this.ensureReady();\n this.jobStore.get(queueName)?.delete(jobId);\n }\n\n /**\n * Retry a failed job\n */\n async retryJob(queueName: string, jobId: string): Promise<void> {\n this.ensureReady();\n\n const storedJob = this.jobStore.get(queueName)?.get(jobId);\n if (!storedJob) {\n return;\n }\n\n // Reset job state\n storedJob.failedReason = undefined;\n storedJob.processedOn = undefined;\n storedJob.finishedOn = undefined;\n storedJob.progress = 0;\n\n // Re-add to queue\n await this.addJob(queueName, storedJob.data, storedJob.options);\n }\n\n /**\n * Pause the queue\n */\n async pauseQueue(queueName: string): Promise<void> {\n this.ensureReady();\n\n const consumerTag = this.consumerTags.get(queueName);\n if (consumerTag && this.channel) {\n await this.channel.cancel(consumerTag);\n this.consumerTags.delete(queueName);\n }\n }\n\n /**\n * Resume the queue\n */\n async resumeQueue(queueName: string): Promise<void> {\n this.ensureReady();\n\n // Restart consuming\n const handler = this.processors.get(queueName);\n if (handler) {\n await this.process(queueName, 1, handler);\n }\n }\n\n /**\n * Get queue metrics\n */\n async getMetrics(queueName: string): Promise<QueueMetrics> {\n this.ensureReady();\n\n const jobs = Array.from(this.jobStore.get(queueName)?.values() || []);\n\n const metrics: QueueMetrics = {\n waiting: 0,\n active: 0,\n completed: 0,\n failed: 0,\n delayed: 0,\n paused: 0,\n };\n\n for (const job of jobs) {\n const status = this.getJobStatus(job);\n if (status in metrics) {\n metrics[status]++;\n }\n }\n\n return metrics;\n }\n\n /**\n * Clean old jobs\n */\n async clean(queueName: string, gracePeriod: number, status?: JobStatus): Promise<void> {\n this.ensureReady();\n\n const jobs = this.jobStore.get(queueName);\n if (!jobs) {\n return;\n }\n\n const cutoff = Date.now() - gracePeriod;\n const jobsToRemove: string[] = [];\n\n for (const [jobId, job] of jobs.entries()) {\n const jobStatus = this.getJobStatus(job);\n const shouldClean = !status || jobStatus === status;\n\n if (shouldClean && job.finishedOn && job.finishedOn < cutoff) {\n jobsToRemove.push(jobId);\n }\n }\n\n for (const jobId of jobsToRemove) {\n jobs.delete(jobId);\n }\n }\n\n /**\n * Obliterate a queue\n */\n async obliterate(queueName: string): Promise<void> {\n this.ensureReady();\n\n // Cancel consumer\n await this.pauseQueue(queueName);\n\n // Delete queue from RabbitMQ\n if (this.channel) {\n await this.channel.deleteQueue(queueName);\n }\n\n // Clear job store\n this.jobStore.delete(queueName);\n this.processors.delete(queueName);\n this.queueConcurrency.delete(queueName);\n }\n\n /**\n * Close the adapter\n */\n async close(): Promise<void> {\n // Signal intentional shutdown so lifecycle handlers don't trigger a reconnect\n this.isClosing = true;\n\n // Cancel all consumers\n for (const queueName of Array.from(this.consumerTags.keys())) {\n await this.pauseQueue(queueName);\n }\n\n // Close channel + connection (best-effort)\n await this.cleanupConnection();\n\n this.jobStore.clear();\n this.processors.clear();\n this.queueConcurrency.clear();\n this.isReady = false;\n }\n\n /**\n * Get job status\n */\n private getJobStatus(job: StoredJob): JobStatus {\n if (job.failedReason) {\n return 'failed';\n }\n if (job.finishedOn) {\n return 'completed';\n }\n if (job.processedOn) {\n return 'active';\n }\n if (job.options.delay && job.options.delay > 0) {\n return 'delayed';\n }\n return 'waiting';\n }\n}\n"]}
@@ -20,7 +20,7 @@ export declare class SQSAdapter extends QueueAdapter {
20
20
  private connectionConfig;
21
21
  private processors;
22
22
  private jobStore;
23
- private pollingIntervals;
23
+ private pollingState;
24
24
  private queueUrls;
25
25
  constructor(connectionConfig?: QueueConnectionConfig);
26
26
  /**
@@ -88,9 +88,19 @@ export declare class SQSAdapter extends QueueAdapter {
88
88
  */
89
89
  close(): Promise<void>;
90
90
  /**
91
- * Start polling for messages
91
+ * Start polling for messages.
92
+ *
93
+ * Runs a single self-scheduling loop instead of a fixed-rate interval: the next
94
+ * poll is only scheduled once the current one settles, so long-poll requests can
95
+ * never stack up. The scheduling timer is unref'd so it doesn't keep the process
96
+ * alive, and an in-flight promise is tracked so pause/close can await the active
97
+ * poll before returning.
92
98
  */
93
99
  private startPolling;
100
+ /**
101
+ * Stop the polling loop for a queue and wait for any in-flight poll to settle.
102
+ */
103
+ private stopPolling;
94
104
  /**
95
105
  * Process a single message
96
106
  */
@@ -23,7 +23,7 @@ export class SQSAdapter extends QueueAdapter {
23
23
  connectionConfig;
24
24
  processors = new Map();
25
25
  jobStore = new Map();
26
- pollingIntervals = new Map();
26
+ pollingState = new Map();
27
27
  queueUrls = new Map();
28
28
  constructor(connectionConfig = {}) {
29
29
  super();
@@ -143,6 +143,9 @@ export class SQSAdapter extends QueueAdapter {
143
143
  const entries = [];
144
144
  for (let i = 0; i < jobs.length; i++) {
145
145
  const jobData = jobs[i];
146
+ if (!jobData) {
147
+ continue;
148
+ }
146
149
  const jobId = jobData.options?.jobId || randomUUID();
147
150
  const job = {
148
151
  id: jobId,
@@ -294,11 +297,7 @@ export class SQSAdapter extends QueueAdapter {
294
297
  */
295
298
  async pauseQueue(queueName) {
296
299
  this.ensureReady();
297
- const interval = this.pollingIntervals.get(queueName);
298
- if (interval) {
299
- clearInterval(interval);
300
- this.pollingIntervals.delete(queueName);
301
- }
300
+ await this.stopPolling(queueName);
302
301
  }
303
302
  /**
304
303
  * Resume the queue
@@ -372,8 +371,8 @@ export class SQSAdapter extends QueueAdapter {
372
371
  */
373
372
  async close() {
374
373
  // Stop all polling
375
- for (const queueName of this.pollingIntervals.keys()) {
376
- await this.pauseQueue(queueName);
374
+ for (const queueName of Array.from(this.pollingState.keys())) {
375
+ await this.stopPolling(queueName);
377
376
  }
378
377
  this.jobStore.clear();
379
378
  this.processors.clear();
@@ -382,13 +381,21 @@ export class SQSAdapter extends QueueAdapter {
382
381
  this.isReady = false;
383
382
  }
384
383
  /**
385
- * Start polling for messages
384
+ * Start polling for messages.
385
+ *
386
+ * Runs a single self-scheduling loop instead of a fixed-rate interval: the next
387
+ * poll is only scheduled once the current one settles, so long-poll requests can
388
+ * never stack up. The scheduling timer is unref'd so it doesn't keep the process
389
+ * alive, and an in-flight promise is tracked so pause/close can await the active
390
+ * poll before returning.
386
391
  */
387
392
  startPolling(queueName, maxMessages) {
388
- if (this.pollingIntervals.has(queueName)) {
393
+ if (this.pollingState.has(queueName)) {
389
394
  return;
390
395
  }
391
- const poll = async () => {
396
+ const state = { timer: null, stopped: false, inFlight: null };
397
+ this.pollingState.set(queueName, state);
398
+ const pollOnce = async () => {
392
399
  try {
393
400
  const command = new this.ReceiveMessageCommand({
394
401
  QueueUrl: this.getQueueUrl(queueName),
@@ -407,11 +414,44 @@ export class SQSAdapter extends QueueAdapter {
407
414
  logger.error(`Error polling queue ${queueName}: ${error}`);
408
415
  }
409
416
  };
410
- // Start polling loop
411
- const interval = setInterval(poll, 100);
412
- this.pollingIntervals.set(queueName, interval);
413
- // Initial poll
414
- poll();
417
+ const runLoop = () => {
418
+ if (state.stopped) {
419
+ return;
420
+ }
421
+ const current = pollOnce();
422
+ state.inFlight = current;
423
+ void current.then(() => {
424
+ state.inFlight = null;
425
+ if (state.stopped) {
426
+ return;
427
+ }
428
+ // Long polling already paces us; schedule the next iteration immediately.
429
+ const timer = setTimeout(runLoop, 0);
430
+ timer.unref();
431
+ state.timer = timer;
432
+ });
433
+ };
434
+ runLoop();
435
+ }
436
+ /**
437
+ * Stop the polling loop for a queue and wait for any in-flight poll to settle.
438
+ */
439
+ async stopPolling(queueName) {
440
+ const state = this.pollingState.get(queueName);
441
+ if (!state) {
442
+ return;
443
+ }
444
+ state.stopped = true;
445
+ if (state.timer) {
446
+ clearTimeout(state.timer);
447
+ state.timer = null;
448
+ }
449
+ // Await the active poll so callers don't race with in-flight message processing.
450
+ const inFlight = state.inFlight;
451
+ if (inFlight) {
452
+ await inFlight.catch(() => { });
453
+ }
454
+ this.pollingState.delete(queueName);
415
455
  }
416
456
  /**
417
457
  * Process a single message
@@ -423,16 +463,27 @@ export class SQSAdapter extends QueueAdapter {
423
463
  }
424
464
  try {
425
465
  const body = JSON.parse(message.Body);
426
- const { jobId, data, options } = body;
427
- const storedJob = this.jobStore.get(queueName)?.get(jobId);
466
+ const { jobId, data, options, timestamp } = body;
467
+ // The SQS message body is the source of truth for the job. In the normal
468
+ // topology producers and consumers are separate processes (or the
469
+ // consumer restarted after enqueue), so this consumer's in-memory
470
+ // jobStore will not contain the job. Reconstruct and cache a local record
471
+ // from the body instead of deleting the message unprocessed — dropping it
472
+ // here silently loses the job and never runs the handler.
473
+ let storedJob = this.jobStore.get(queueName)?.get(jobId);
428
474
  if (!storedJob) {
429
- // Delete unknown message
475
+ storedJob = {
476
+ id: jobId,
477
+ name: queueName,
478
+ data,
479
+ options: options || {},
480
+ attemptsMade: 0,
481
+ timestamp: timestamp || Date.now(),
482
+ progress: 0,
483
+ };
484
+ this.ensureJobStore(queueName);
430
485
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
431
- await this.client.send(new this.DeleteMessageCommand({
432
- QueueUrl: this.getQueueUrl(queueName),
433
- ReceiptHandle: message.ReceiptHandle,
434
- }));
435
- return;
486
+ this.jobStore.get(queueName).set(jobId, storedJob);
436
487
  }
437
488
  storedJob.receiptHandle = message.ReceiptHandle;
438
489
  storedJob.processedOn = Date.now();