bunqueue 1.9.7 → 1.9.9

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 (245) hide show
  1. package/dist/application/backgroundTasks.d.ts +3 -6
  2. package/dist/application/backgroundTasks.d.ts.map +1 -1
  3. package/dist/application/backgroundTasks.js +10 -179
  4. package/dist/application/backgroundTasks.js.map +1 -1
  5. package/dist/application/cleanupTasks.d.ts +1 -1
  6. package/dist/application/cleanupTasks.d.ts.map +1 -1
  7. package/dist/application/cleanupTasks.js +61 -22
  8. package/dist/application/cleanupTasks.js.map +1 -1
  9. package/dist/application/clientTracking.d.ts +22 -0
  10. package/dist/application/clientTracking.d.ts.map +1 -0
  11. package/dist/application/clientTracking.js +118 -0
  12. package/dist/application/clientTracking.js.map +1 -0
  13. package/dist/application/contextFactory.d.ts +97 -0
  14. package/dist/application/contextFactory.d.ts.map +1 -0
  15. package/dist/application/contextFactory.js +170 -0
  16. package/dist/application/contextFactory.js.map +1 -0
  17. package/dist/application/dependencyProcessor.d.ts +11 -0
  18. package/dist/application/dependencyProcessor.d.ts.map +1 -0
  19. package/dist/application/dependencyProcessor.js +69 -0
  20. package/dist/application/dependencyProcessor.js.map +1 -0
  21. package/dist/application/dlqManager.d.ts +12 -0
  22. package/dist/application/dlqManager.d.ts.map +1 -1
  23. package/dist/application/dlqManager.js +36 -0
  24. package/dist/application/dlqManager.js.map +1 -1
  25. package/dist/application/lockManager.d.ts +3 -49
  26. package/dist/application/lockManager.d.ts.map +1 -1
  27. package/dist/application/lockManager.js +101 -272
  28. package/dist/application/lockManager.js.map +1 -1
  29. package/dist/application/lockOperations.d.ts +39 -0
  30. package/dist/application/lockOperations.d.ts.map +1 -0
  31. package/dist/application/lockOperations.js +101 -0
  32. package/dist/application/lockOperations.js.map +1 -0
  33. package/dist/application/operations/ack.d.ts +1 -5
  34. package/dist/application/operations/ack.d.ts.map +1 -1
  35. package/dist/application/operations/ack.js +43 -259
  36. package/dist/application/operations/ack.js.map +1 -1
  37. package/dist/application/operations/ackHelpers.d.ts +79 -0
  38. package/dist/application/operations/ackHelpers.d.ts.map +1 -0
  39. package/dist/application/operations/ackHelpers.js +173 -0
  40. package/dist/application/operations/ackHelpers.js.map +1 -0
  41. package/dist/application/operations/jobManagement.d.ts +2 -0
  42. package/dist/application/operations/jobManagement.d.ts.map +1 -1
  43. package/dist/application/operations/jobManagement.js +8 -0
  44. package/dist/application/operations/jobManagement.js.map +1 -1
  45. package/dist/application/operations/push.d.ts.map +1 -1
  46. package/dist/application/operations/push.js +20 -6
  47. package/dist/application/operations/push.js.map +1 -1
  48. package/dist/application/operations/queryOperations.d.ts +11 -0
  49. package/dist/application/operations/queryOperations.d.ts.map +1 -1
  50. package/dist/application/operations/queryOperations.js +32 -0
  51. package/dist/application/operations/queryOperations.js.map +1 -1
  52. package/dist/application/queueManager.d.ts +3 -11
  53. package/dist/application/queueManager.d.ts.map +1 -1
  54. package/dist/application/queueManager.js +98 -244
  55. package/dist/application/queueManager.js.map +1 -1
  56. package/dist/application/stallDetection.d.ts +11 -0
  57. package/dist/application/stallDetection.d.ts.map +1 -0
  58. package/dist/application/stallDetection.js +128 -0
  59. package/dist/application/stallDetection.js.map +1 -0
  60. package/dist/application/types.js +1 -1
  61. package/dist/application/types.js.map +1 -1
  62. package/dist/cli/client.d.ts +3 -5
  63. package/dist/cli/client.d.ts.map +1 -1
  64. package/dist/cli/client.js +31 -27
  65. package/dist/cli/client.js.map +1 -1
  66. package/dist/cli/commands/core.js +3 -3
  67. package/dist/cli/commands/core.js.map +1 -1
  68. package/dist/cli/commands/job.js +14 -14
  69. package/dist/cli/commands/job.js.map +1 -1
  70. package/dist/cli/commands/server.d.ts.map +1 -1
  71. package/dist/cli/commands/server.js +5 -29
  72. package/dist/cli/commands/server.js.map +1 -1
  73. package/dist/cli/index.d.ts.map +1 -1
  74. package/dist/cli/index.js +1 -9
  75. package/dist/cli/index.js.map +1 -1
  76. package/dist/client/events.d.ts +0 -1
  77. package/dist/client/events.d.ts.map +1 -1
  78. package/dist/client/events.js +4 -7
  79. package/dist/client/events.js.map +1 -1
  80. package/dist/client/flow.d.ts +23 -1
  81. package/dist/client/flow.d.ts.map +1 -1
  82. package/dist/client/flow.js +166 -68
  83. package/dist/client/flow.js.map +1 -1
  84. package/dist/client/queue/queue.d.ts.map +1 -1
  85. package/dist/client/queue/queue.js +3 -1
  86. package/dist/client/queue/queue.js.map +1 -1
  87. package/dist/client/sandboxed/types.d.ts +1 -0
  88. package/dist/client/sandboxed/types.d.ts.map +1 -1
  89. package/dist/client/sandboxed/worker.d.ts +1 -0
  90. package/dist/client/sandboxed/worker.d.ts.map +1 -1
  91. package/dist/client/sandboxed/worker.js +31 -8
  92. package/dist/client/sandboxed/worker.js.map +1 -1
  93. package/dist/client/sandboxed/wrapper.d.ts.map +1 -1
  94. package/dist/client/sandboxed/wrapper.js +10 -1
  95. package/dist/client/sandboxed/wrapper.js.map +1 -1
  96. package/dist/client/tcp/client.d.ts +4 -1
  97. package/dist/client/tcp/client.d.ts.map +1 -1
  98. package/dist/client/tcp/client.js +26 -8
  99. package/dist/client/tcp/client.js.map +1 -1
  100. package/dist/client/tcp/connection.d.ts +6 -8
  101. package/dist/client/tcp/connection.d.ts.map +1 -1
  102. package/dist/client/tcp/connection.js +24 -22
  103. package/dist/client/tcp/connection.js.map +1 -1
  104. package/dist/client/tcp/index.d.ts +0 -1
  105. package/dist/client/tcp/index.d.ts.map +1 -1
  106. package/dist/client/tcp/index.js +0 -1
  107. package/dist/client/tcp/index.js.map +1 -1
  108. package/dist/client/tcp/types.d.ts +8 -13
  109. package/dist/client/tcp/types.d.ts.map +1 -1
  110. package/dist/client/tcp/types.js +0 -1
  111. package/dist/client/tcp/types.js.map +1 -1
  112. package/dist/client/tcpPool.d.ts.map +1 -1
  113. package/dist/client/tcpPool.js +0 -6
  114. package/dist/client/tcpPool.js.map +1 -1
  115. package/dist/client/worker/ackBatcher.d.ts +1 -1
  116. package/dist/client/worker/ackBatcher.d.ts.map +1 -1
  117. package/dist/client/worker/ackBatcher.js +20 -18
  118. package/dist/client/worker/ackBatcher.js.map +1 -1
  119. package/dist/client/worker/jobParser.d.ts.map +1 -1
  120. package/dist/client/worker/jobParser.js +8 -7
  121. package/dist/client/worker/jobParser.js.map +1 -1
  122. package/dist/client/worker/processor.d.ts.map +1 -1
  123. package/dist/client/worker/processor.js +10 -6
  124. package/dist/client/worker/processor.js.map +1 -1
  125. package/dist/domain/queue/dependencyTracker.d.ts +74 -0
  126. package/dist/domain/queue/dependencyTracker.d.ts.map +1 -0
  127. package/dist/domain/queue/dependencyTracker.js +126 -0
  128. package/dist/domain/queue/dependencyTracker.js.map +1 -0
  129. package/dist/domain/queue/dlqShard.d.ts +61 -0
  130. package/dist/domain/queue/dlqShard.d.ts.map +1 -0
  131. package/dist/domain/queue/dlqShard.js +175 -0
  132. package/dist/domain/queue/dlqShard.js.map +1 -0
  133. package/dist/domain/queue/limiterManager.d.ts +44 -0
  134. package/dist/domain/queue/limiterManager.d.ts.map +1 -0
  135. package/dist/domain/queue/limiterManager.js +99 -0
  136. package/dist/domain/queue/limiterManager.js.map +1 -0
  137. package/dist/domain/queue/shard.d.ts +33 -124
  138. package/dist/domain/queue/shard.d.ts.map +1 -1
  139. package/dist/domain/queue/shard.js +157 -427
  140. package/dist/domain/queue/shard.js.map +1 -1
  141. package/dist/domain/queue/temporalManager.d.ts +82 -0
  142. package/dist/domain/queue/temporalManager.d.ts.map +1 -0
  143. package/dist/domain/queue/temporalManager.js +150 -0
  144. package/dist/domain/queue/temporalManager.js.map +1 -0
  145. package/dist/domain/queue/uniqueKeyManager.d.ts +32 -0
  146. package/dist/domain/queue/uniqueKeyManager.d.ts.map +1 -0
  147. package/dist/domain/queue/uniqueKeyManager.js +87 -0
  148. package/dist/domain/queue/uniqueKeyManager.js.map +1 -0
  149. package/dist/domain/types/command.d.ts +6 -0
  150. package/dist/domain/types/command.d.ts.map +1 -1
  151. package/dist/infrastructure/backup/s3Backup.d.ts +3 -40
  152. package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -1
  153. package/dist/infrastructure/backup/s3Backup.js +10 -182
  154. package/dist/infrastructure/backup/s3Backup.js.map +1 -1
  155. package/dist/infrastructure/backup/s3BackupConfig.d.ts +67 -0
  156. package/dist/infrastructure/backup/s3BackupConfig.d.ts.map +1 -0
  157. package/dist/infrastructure/backup/s3BackupConfig.js +48 -0
  158. package/dist/infrastructure/backup/s3BackupConfig.js.map +1 -0
  159. package/dist/infrastructure/backup/s3BackupOperations.d.ts +23 -0
  160. package/dist/infrastructure/backup/s3BackupOperations.d.ts.map +1 -0
  161. package/dist/infrastructure/backup/s3BackupOperations.js +170 -0
  162. package/dist/infrastructure/backup/s3BackupOperations.js.map +1 -0
  163. package/dist/infrastructure/persistence/sqlite.d.ts +6 -13
  164. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  165. package/dist/infrastructure/persistence/sqlite.js +28 -179
  166. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  167. package/dist/infrastructure/persistence/sqliteBatch.d.ts +38 -0
  168. package/dist/infrastructure/persistence/sqliteBatch.d.ts.map +1 -0
  169. package/dist/infrastructure/persistence/sqliteBatch.js +124 -0
  170. package/dist/infrastructure/persistence/sqliteBatch.js.map +1 -0
  171. package/dist/infrastructure/persistence/sqliteSerializer.d.ts +17 -0
  172. package/dist/infrastructure/persistence/sqliteSerializer.d.ts.map +1 -0
  173. package/dist/infrastructure/persistence/sqliteSerializer.js +81 -0
  174. package/dist/infrastructure/persistence/sqliteSerializer.js.map +1 -0
  175. package/dist/infrastructure/persistence/statements.d.ts +1 -1
  176. package/dist/infrastructure/persistence/statements.d.ts.map +1 -1
  177. package/dist/infrastructure/persistence/statements.js +3 -2
  178. package/dist/infrastructure/persistence/statements.js.map +1 -1
  179. package/dist/infrastructure/scheduler/cronScheduler.d.ts +7 -0
  180. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
  181. package/dist/infrastructure/scheduler/cronScheduler.js +23 -3
  182. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
  183. package/dist/infrastructure/server/handler.d.ts.map +1 -1
  184. package/dist/infrastructure/server/handler.js +1 -186
  185. package/dist/infrastructure/server/handler.js.map +1 -1
  186. package/dist/infrastructure/server/handlerRoutes.d.ts +23 -0
  187. package/dist/infrastructure/server/handlerRoutes.d.ts.map +1 -0
  188. package/dist/infrastructure/server/handlerRoutes.js +190 -0
  189. package/dist/infrastructure/server/handlerRoutes.js.map +1 -0
  190. package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
  191. package/dist/infrastructure/server/handlers/core.js +26 -19
  192. package/dist/infrastructure/server/handlers/core.js.map +1 -1
  193. package/dist/infrastructure/server/http.d.ts +4 -25
  194. package/dist/infrastructure/server/http.d.ts.map +1 -1
  195. package/dist/infrastructure/server/http.js +68 -285
  196. package/dist/infrastructure/server/http.js.map +1 -1
  197. package/dist/infrastructure/server/httpEndpoints.d.ts +19 -0
  198. package/dist/infrastructure/server/httpEndpoints.d.ts.map +1 -0
  199. package/dist/infrastructure/server/httpEndpoints.js +151 -0
  200. package/dist/infrastructure/server/httpEndpoints.js.map +1 -0
  201. package/dist/infrastructure/server/protocol.d.ts +15 -1
  202. package/dist/infrastructure/server/protocol.d.ts.map +1 -1
  203. package/dist/infrastructure/server/protocol.js +37 -3
  204. package/dist/infrastructure/server/protocol.js.map +1 -1
  205. package/dist/infrastructure/server/sseHandler.d.ts +27 -0
  206. package/dist/infrastructure/server/sseHandler.d.ts.map +1 -0
  207. package/dist/infrastructure/server/sseHandler.js +77 -0
  208. package/dist/infrastructure/server/sseHandler.js.map +1 -0
  209. package/dist/infrastructure/server/tcp.d.ts +8 -10
  210. package/dist/infrastructure/server/tcp.d.ts.map +1 -1
  211. package/dist/infrastructure/server/tcp.js +51 -42
  212. package/dist/infrastructure/server/tcp.js.map +1 -1
  213. package/dist/infrastructure/server/wsHandler.d.ts +31 -0
  214. package/dist/infrastructure/server/wsHandler.d.ts.map +1 -0
  215. package/dist/infrastructure/server/wsHandler.js +63 -0
  216. package/dist/infrastructure/server/wsHandler.js.map +1 -0
  217. package/dist/main.js +2 -4
  218. package/dist/main.js.map +1 -1
  219. package/dist/mcp/index.js +3 -465
  220. package/dist/mcp/index.js.map +1 -1
  221. package/dist/mcp/mcpHandlers.d.ts +129 -0
  222. package/dist/mcp/mcpHandlers.d.ts.map +1 -0
  223. package/dist/mcp/mcpHandlers.js +204 -0
  224. package/dist/mcp/mcpHandlers.js.map +1 -0
  225. package/dist/mcp/mcpTools.d.ts +15 -0
  226. package/dist/mcp/mcpTools.d.ts.map +1 -0
  227. package/dist/mcp/mcpTools.js +277 -0
  228. package/dist/mcp/mcpTools.js.map +1 -0
  229. package/dist/shared/lru.d.ts +23 -0
  230. package/dist/shared/lru.d.ts.map +1 -1
  231. package/dist/shared/lru.js +61 -3
  232. package/dist/shared/lru.js.map +1 -1
  233. package/dist/shared/skipList.d.ts +10 -2
  234. package/dist/shared/skipList.d.ts.map +1 -1
  235. package/dist/shared/skipList.js +22 -1
  236. package/dist/shared/skipList.js.map +1 -1
  237. package/package.json +2 -2
  238. package/dist/cli/dashboard.d.ts +0 -32
  239. package/dist/cli/dashboard.d.ts.map +0 -1
  240. package/dist/cli/dashboard.js +0 -183
  241. package/dist/cli/dashboard.js.map +0 -1
  242. package/dist/client/tcp/lineBuffer.d.ts +0 -17
  243. package/dist/client/tcp/lineBuffer.d.ts.map +0 -1
  244. package/dist/client/tcp/lineBuffer.js +0 -32
  245. package/dist/client/tcp/lineBuffer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/server/handlers/core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ/C,0BAA0B;AAC1B,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAmDnB;AAED,wCAAwC;AACxC,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC,EACvC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAMnB;AAED,0BAA0B;AAC1B,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CA6BnB;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC,EACvC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAkCnB;AAED,yBAAyB;AACzB,wBAAsB,SAAS,CAC7B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,KAAK,CAAA;CAAE,CAAC,EACrC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CA0BnB;AAED,0BAA0B;AAC1B,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAUnB"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/server/handlers/core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ/C,0BAA0B;AAC1B,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAyDnB;AAED,wCAAwC;AACxC,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC,EACvC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAMnB;AAED,0BAA0B;AAC1B,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CA6BnB;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC,EACvC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAkCnB;AAED,yBAAyB;AACzB,wBAAsB,SAAS,CAC7B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,KAAK,CAAA;CAAE,CAAC,EACrC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CA0BnB;AAED,0BAA0B;AAC1B,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,GAAG,EAAE,cAAc,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAUnB"}
@@ -35,25 +35,32 @@ export async function handlePush(cmd, ctx, reqId) {
35
35
  }
36
36
  }
37
37
  }
38
- const job = await ctx.queueManager.push(cmd.queue, {
39
- data: cmd.data,
40
- priority: cmd.priority,
41
- delay: cmd.delay,
42
- maxAttempts: cmd.maxAttempts,
43
- backoff: cmd.backoff,
44
- ttl: cmd.ttl,
45
- timeout: cmd.timeout,
46
- uniqueKey: cmd.uniqueKey,
47
- customId: cmd.jobId,
48
- dependsOn: cmd.dependsOn?.map((id) => jobId(id)),
49
- tags: cmd.tags,
50
- groupId: cmd.groupId,
51
- lifo: cmd.lifo,
52
- removeOnComplete: cmd.removeOnComplete,
53
- removeOnFail: cmd.removeOnFail,
54
- durable: cmd.durable,
55
- });
56
- return resp.ok(job.id, reqId);
38
+ try {
39
+ const job = await ctx.queueManager.push(cmd.queue, {
40
+ data: cmd.data,
41
+ priority: cmd.priority,
42
+ delay: cmd.delay,
43
+ maxAttempts: cmd.maxAttempts,
44
+ backoff: cmd.backoff,
45
+ ttl: cmd.ttl,
46
+ timeout: cmd.timeout,
47
+ uniqueKey: cmd.uniqueKey,
48
+ customId: cmd.jobId,
49
+ dependsOn: cmd.dependsOn?.map((id) => jobId(id)),
50
+ tags: cmd.tags,
51
+ groupId: cmd.groupId,
52
+ lifo: cmd.lifo,
53
+ removeOnComplete: cmd.removeOnComplete,
54
+ removeOnFail: cmd.removeOnFail,
55
+ durable: cmd.durable,
56
+ repeat: cmd.repeat,
57
+ });
58
+ return resp.ok(job.id, reqId);
59
+ }
60
+ catch (err) {
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ return resp.error(message, reqId);
63
+ }
57
64
  }
58
65
  /** Handle PUSHB (batch push) command */
59
66
  export async function handlePushBatch(cmd, ctx, reqId) {
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/infrastructure/server/handlers/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/infrastructure/server/handlers/core.ts"],"names":[],"mappings":"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"}
@@ -4,47 +4,26 @@
4
4
  */
5
5
  import type { Server, ServerWebSocket } from 'bun';
6
6
  import type { QueueManager } from '../../application/queueManager';
7
+ import { type WsData } from './wsHandler';
7
8
  /** HTTP Server configuration */
8
9
  export interface HttpServerConfig {
9
- /** HTTP port (ignored if socketPath is set) */
10
10
  port?: number;
11
- /** Hostname to bind (ignored if socketPath is set) */
12
11
  hostname?: string;
13
- /** Unix socket path (takes priority over port/hostname) */
14
12
  socketPath?: string;
15
- /** Auth tokens for authentication */
16
13
  authTokens?: string[];
17
- /** CORS allowed origins */
18
14
  corsOrigins?: string[];
19
- /** Require auth for metrics endpoint */
20
15
  requireAuthForMetrics?: boolean;
21
16
  }
22
- /** WebSocket client data */
23
- interface WsData {
24
- id: string;
25
- authenticated: boolean;
26
- queueFilter: string | null;
27
- }
28
- /** SSE client tracking */
29
- interface SseClient {
30
- id: string;
31
- controller: ReadableStreamDefaultController;
32
- queueFilter: string | null;
33
- }
34
17
  /**
35
18
  * Create and start HTTP server
36
19
  */
37
20
  export declare function createHttpServer(queueManager: QueueManager, config: HttpServerConfig): {
38
21
  server: Server<WsData>;
39
22
  wsClients: Map<string, ServerWebSocket<WsData>>;
40
- sseClients: Map<string, SseClient>;
41
- /** Get WebSocket client count */
42
- getWsClientCount(): number;
43
- /** Get SSE client count */
44
- getSseClientCount(): number;
45
- /** Stop the server */
23
+ sseClients: Map<string, import("./sseHandler").SseClient>;
24
+ getWsClientCount: () => number;
25
+ getSseClientCount: () => number;
46
26
  stop(): void;
47
27
  };
48
28
  export type HttpServer = ReturnType<typeof createHttpServer>;
49
- export {};
50
29
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/server/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AA4BnE,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,wCAAwC;IACxC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,4BAA4B;AAC5B,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,0BAA0B;AAC1B,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,+BAA+B,CAAC;IAC5C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB;;;;IA2UjF,iCAAiC;wBACb,MAAM;IAI1B,2BAA2B;yBACN,MAAM;IAI3B,sBAAsB;YACd,IAAI;EAef;AA8JD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/server/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAOnE,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAuBrD,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB;;;;;;YA2KzE,IAAI;EAMf;AAqFD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -3,18 +3,14 @@
3
3
  * REST API and WebSocket support
4
4
  */
5
5
  import { handleCommand } from './handler';
6
- import { parseCommand, serializeResponse, errorResponse } from './protocol';
7
6
  import { constantTimeEqual, uuid } from '../../shared/hash';
8
- import { httpLog, wsLog } from '../../shared/logger';
7
+ import { httpLog } from '../../shared/logger';
9
8
  import { getRateLimiter } from './rateLimiter';
10
- import { VERSION } from '../../shared/version';
11
- /** Singleton TextEncoder for SSE messages - avoids allocation per message */
12
- const textEncoder = new TextEncoder();
13
- /** Singleton TextDecoder for WebSocket messages */
14
- const textDecoder = new TextDecoder();
9
+ import { SseHandler } from './sseHandler';
10
+ import { WsHandler } from './wsHandler';
11
+ import { jsonResponse, corsResponse, healthEndpoint, gcEndpoint, heapStatsEndpoint, statsEndpoint, metricsEndpoint, } from './httpEndpoints';
15
12
  /**
16
- * Validate auth token against valid tokens set - O(n) but single function
17
- * Uses constant-time comparison to prevent timing attacks
13
+ * Validate auth token against valid tokens set
18
14
  */
19
15
  function validateAuthToken(token, authTokens) {
20
16
  for (const validToken of authTokens) {
@@ -29,37 +25,16 @@ function validateAuthToken(token, authTokens) {
29
25
  */
30
26
  export function createHttpServer(queueManager, config) {
31
27
  const authTokens = new Set(config.authTokens ?? []);
32
- const wsClients = new Map();
33
- const sseClients = new Map();
34
28
  const corsOrigins = new Set(config.corsOrigins ?? ['*']);
35
- // Subscribe to queue events for WebSocket and SSE broadcast
29
+ const wsHandler = new WsHandler();
30
+ const sseHandler = new SseHandler();
31
+ // Subscribe to queue events for broadcast
36
32
  queueManager.subscribe((event) => {
37
- const message = JSON.stringify(event);
38
- // WebSocket clients
39
- for (const [, ws] of wsClients) {
40
- if (!ws.data.queueFilter || ws.data.queueFilter === event.queue) {
41
- ws.send(message);
42
- }
43
- }
44
- // SSE clients
45
- const sseMessage = `data: ${message}\n\n`;
46
- const disconnectedClients = [];
47
- for (const [clientId, client] of sseClients) {
48
- if (!client.queueFilter || client.queueFilter === event.queue) {
49
- try {
50
- client.controller.enqueue(textEncoder.encode(sseMessage));
51
- }
52
- catch {
53
- // Client disconnected, mark for removal
54
- disconnectedClients.push(clientId);
55
- }
56
- }
57
- }
58
- // Remove disconnected clients
59
- for (const clientId of disconnectedClients) {
60
- sseClients.delete(clientId);
61
- }
33
+ wsHandler.broadcast(event);
34
+ sseHandler.broadcast(event);
62
35
  });
36
+ // Helper to get CORS origin string
37
+ const getCorsOrigin = () => (corsOrigins.has('*') ? '*' : Array.from(corsOrigins).join(', '));
63
38
  // Fetch handler
64
39
  const fetch = async (req, server) => {
65
40
  const url = new URL(req.url);
@@ -68,101 +43,24 @@ export function createHttpServer(queueManager, config) {
68
43
  if (req.method === 'OPTIONS') {
69
44
  return corsResponse(corsOrigins);
70
45
  }
71
- // Health check (no auth, no rate limit)
46
+ // Health endpoints (no auth, no rate limit)
72
47
  if (path === '/health') {
73
- const stats = queueManager.getStats();
74
- const uptime = process.uptime();
75
- const memoryUsage = process.memoryUsage();
76
- return jsonResponse({
77
- ok: true,
78
- status: 'healthy',
79
- uptime: Math.floor(uptime),
80
- version: VERSION,
81
- queues: {
82
- waiting: stats.waiting,
83
- active: stats.active,
84
- delayed: stats.delayed,
85
- completed: stats.completed,
86
- dlq: stats.dlq,
87
- },
88
- connections: {
89
- tcp: 0, // Would need server reference
90
- ws: wsClients.size,
91
- sse: sseClients.size,
92
- },
93
- memory: {
94
- heapUsed: Math.round(memoryUsage.heapUsed / 1024 / 1024),
95
- heapTotal: Math.round(memoryUsage.heapTotal / 1024 / 1024),
96
- rss: Math.round(memoryUsage.rss / 1024 / 1024),
97
- },
98
- });
48
+ return healthEndpoint(queueManager, wsHandler.size, sseHandler.size);
99
49
  }
100
- // Simple liveness probe (minimal response)
101
50
  if (path === '/healthz' || path === '/live') {
102
51
  return new Response('OK', { status: 200 });
103
52
  }
104
- // Readiness probe (checks if server can accept work)
105
53
  if (path === '/ready') {
106
54
  return jsonResponse({ ok: true, ready: true });
107
55
  }
108
- // Force garbage collection (for debugging memory issues)
56
+ // Debug endpoints
109
57
  if (path === '/gc' && req.method === 'POST') {
110
- const before = process.memoryUsage();
111
- if (typeof Bun !== 'undefined' && Bun.gc) {
112
- Bun.gc(true); // Aggressive GC
113
- }
114
- queueManager.compactMemory();
115
- const after = process.memoryUsage();
116
- return jsonResponse({
117
- ok: true,
118
- before: {
119
- heapUsed: Math.round(before.heapUsed / 1024 / 1024),
120
- heapTotal: Math.round(before.heapTotal / 1024 / 1024),
121
- rss: Math.round(before.rss / 1024 / 1024),
122
- },
123
- after: {
124
- heapUsed: Math.round(after.heapUsed / 1024 / 1024),
125
- heapTotal: Math.round(after.heapTotal / 1024 / 1024),
126
- rss: Math.round(after.rss / 1024 / 1024),
127
- },
128
- });
58
+ return gcEndpoint(queueManager);
129
59
  }
130
- // Heap statistics (for debugging memory leaks)
131
60
  if (path === '/heapstats' && req.method === 'GET') {
132
- // Run GC first for accurate stats
133
- if (typeof Bun !== 'undefined' && Bun.gc) {
134
- Bun.gc(true);
135
- }
136
- // Get heap stats from bun:jsc
137
- const { heapStats } = await import('bun:jsc');
138
- const stats = heapStats();
139
- const mem = process.memoryUsage();
140
- const memStats = queueManager.getMemoryStats();
141
- // Get top object types by count
142
- const typeCounts = stats.objectTypeCounts;
143
- const topTypes = typeCounts
144
- ? Object.entries(typeCounts)
145
- .sort((a, b) => b[1] - a[1])
146
- .slice(0, 20)
147
- .map(([type, count]) => ({ type, count }))
148
- : [];
149
- return jsonResponse({
150
- ok: true,
151
- memory: {
152
- heapUsed: Math.round(mem.heapUsed / 1024 / 1024),
153
- heapTotal: Math.round(mem.heapTotal / 1024 / 1024),
154
- rss: Math.round(mem.rss / 1024 / 1024),
155
- },
156
- heap: {
157
- objectCount: stats.objectCount,
158
- protectedCount: stats.protectedObjectCount,
159
- globalCount: stats.globalObjectCount,
160
- },
161
- collections: memStats,
162
- topObjectTypes: topTypes,
163
- });
61
+ return heapStatsEndpoint(queueManager);
164
62
  }
165
- // Rate limiting (use IP as client ID for HTTP)
63
+ // Rate limiting
166
64
  const clientIp = req.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ??
167
65
  req.headers.get('x-real-ip') ??
168
66
  'unknown';
@@ -171,25 +69,23 @@ export function createHttpServer(queueManager, config) {
171
69
  }
172
70
  // WebSocket upgrade
173
71
  if (path === '/ws' || path.startsWith('/ws/')) {
72
+ // Validate auth token if authentication is required
73
+ if (authTokens.size > 0) {
74
+ const token = req.headers.get('Authorization')?.replace('Bearer ', '') ?? '';
75
+ if (!validateAuthToken(token, authTokens)) {
76
+ return jsonResponse({ ok: false, error: 'Unauthorized' }, 401);
77
+ }
78
+ }
174
79
  const queueFilter = path.startsWith('/ws/queues/') ? path.slice('/ws/queues/'.length) : null;
175
80
  const upgraded = server.upgrade(req, {
176
- data: {
177
- id: uuid(),
178
- authenticated: authTokens.size === 0,
179
- queueFilter,
180
- },
81
+ data: { id: uuid(), authenticated: true, queueFilter },
181
82
  });
182
- if (!upgraded) {
183
- return new Response('WebSocket upgrade failed', { status: 400 });
184
- }
185
- return undefined;
83
+ return upgraded ? undefined : new Response('WebSocket upgrade failed', { status: 400 });
186
84
  }
187
- // SSE (Server-Sent Events) endpoint - requires auth when enabled
85
+ // SSE endpoint
188
86
  if (path === '/events' || path.startsWith('/events/')) {
189
- // Check authentication for SSE
190
87
  if (authTokens.size > 0) {
191
- const authHeader = req.headers.get('Authorization');
192
- const token = authHeader?.replace('Bearer ', '') ?? '';
88
+ const token = req.headers.get('Authorization')?.replace('Bearer ', '') ?? '';
193
89
  if (!validateAuthToken(token, authTokens)) {
194
90
  return jsonResponse({ ok: false, error: 'Unauthorized' }, 401);
195
91
  }
@@ -197,61 +93,30 @@ export function createHttpServer(queueManager, config) {
197
93
  const queueFilter = path.startsWith('/events/queues/')
198
94
  ? path.slice('/events/queues/'.length)
199
95
  : null;
200
- const clientId = uuid();
201
- const stream = new ReadableStream({
202
- start(controller) {
203
- sseClients.set(clientId, {
204
- id: clientId,
205
- controller,
206
- queueFilter,
207
- });
208
- // Send initial connection message
209
- controller.enqueue(textEncoder.encode(`data: {"connected":true,"clientId":"${clientId}"}\n\n`));
210
- },
211
- cancel() {
212
- sseClients.delete(clientId);
213
- },
214
- });
215
- return new Response(stream, {
216
- headers: {
217
- 'Content-Type': 'text/event-stream',
218
- 'Cache-Control': 'no-cache',
219
- Connection: 'keep-alive',
220
- 'Access-Control-Allow-Origin': corsOrigins.has('*')
221
- ? '*'
222
- : Array.from(corsOrigins).join(', '),
223
- },
224
- });
96
+ return sseHandler.createResponse(queueFilter, getCorsOrigin());
225
97
  }
226
- // Prometheus metrics endpoint (auth optional via config)
98
+ // Prometheus metrics
227
99
  if (path === '/prometheus' && req.method === 'GET') {
228
100
  if (config.requireAuthForMetrics && authTokens.size > 0) {
229
- const authHeader = req.headers.get('Authorization');
230
- const token = authHeader?.replace('Bearer ', '') ?? '';
101
+ const token = req.headers.get('Authorization')?.replace('Bearer ', '') ?? '';
231
102
  if (!validateAuthToken(token, authTokens)) {
232
103
  return jsonResponse({ ok: false, error: 'Unauthorized' }, 401);
233
104
  }
234
105
  }
235
- const metrics = queueManager.getPrometheusMetrics();
236
- return new Response(metrics, {
106
+ return new Response(queueManager.getPrometheusMetrics(), {
237
107
  headers: { 'Content-Type': 'text/plain; version=0.0.4; charset=utf-8' },
238
108
  });
239
109
  }
240
- // Check authentication
110
+ // Check authentication for other endpoints
241
111
  if (authTokens.size > 0) {
242
- const authHeader = req.headers.get('Authorization');
243
- const token = authHeader?.replace('Bearer ', '') ?? '';
112
+ const token = req.headers.get('Authorization')?.replace('Bearer ', '') ?? '';
244
113
  if (!validateAuthToken(token, authTokens)) {
245
114
  return jsonResponse({ ok: false, error: 'Unauthorized' }, 401);
246
115
  }
247
116
  }
248
- // Create handler context
249
- const ctx = {
250
- queueManager,
251
- authTokens,
252
- authenticated: true,
253
- };
254
- // Route request
117
+ // Generate unique clientId for HTTP request (stateless, but needed for job ownership tracking)
118
+ const clientId = uuid();
119
+ const ctx = { queueManager, authTokens, authenticated: true, clientId };
255
120
  try {
256
121
  return await routeRequest(req, path, ctx, corsOrigins);
257
122
  }
@@ -263,47 +128,40 @@ export function createHttpServer(queueManager, config) {
263
128
  // WebSocket handlers
264
129
  const websocket = {
265
130
  open(ws) {
266
- wsClients.set(ws.data.id, ws);
267
- wsLog.info('Client connected', { clientId: ws.data.id });
131
+ wsHandler.onOpen(ws);
268
132
  },
269
133
  async message(ws, message) {
270
- const text = typeof message === 'string' ? message : textDecoder.decode(message);
271
- const cmd = parseCommand(text);
272
- if (!cmd) {
273
- ws.send(errorResponse('Invalid command'));
274
- return;
275
- }
276
134
  const ctx = {
277
135
  queueManager,
278
136
  authTokens,
279
137
  authenticated: ws.data.authenticated,
138
+ clientId: ws.data.id, // Use WebSocket connection ID for job ownership tracking
280
139
  };
281
- try {
282
- const response = await handleCommand(cmd, ctx);
283
- // Update authentication state
284
- if (cmd.cmd === 'Auth' && response.ok) {
285
- ws.data.authenticated = true;
286
- }
287
- ws.send(serializeResponse(response));
288
- }
289
- catch (err) {
290
- const msg = err instanceof Error ? err.message : 'Unknown error';
291
- ws.send(errorResponse(msg, cmd.reqId));
292
- }
140
+ await wsHandler.onMessage(ws, message, ctx);
293
141
  },
294
142
  close(ws) {
295
- wsClients.delete(ws.data.id);
296
- wsLog.info('Client disconnected', { clientId: ws.data.id });
143
+ const clientId = ws.data.id;
144
+ wsHandler.onClose(ws);
145
+ // Release all jobs owned by this WebSocket client back to queue
146
+ queueManager
147
+ .releaseClientJobs(clientId)
148
+ .then((released) => {
149
+ if (released > 0) {
150
+ httpLog.info('WebSocket client disconnected, released jobs', { clientId, released });
151
+ }
152
+ })
153
+ .catch((err) => {
154
+ httpLog.error('Failed to release WebSocket client jobs', {
155
+ clientId,
156
+ error: String(err),
157
+ });
158
+ });
297
159
  },
298
160
  };
299
- // Create server - Unix socket or TCP based on config
161
+ // Create server
300
162
  let server;
301
163
  if (config.socketPath) {
302
- server = Bun.serve({
303
- unix: config.socketPath,
304
- fetch,
305
- websocket,
306
- });
164
+ server = Bun.serve({ unix: config.socketPath, fetch, websocket });
307
165
  httpLog.info('Server listening', { unix: config.socketPath });
308
166
  }
309
167
  else {
@@ -317,76 +175,29 @@ export function createHttpServer(queueManager, config) {
317
175
  }
318
176
  return {
319
177
  server,
320
- wsClients,
321
- sseClients,
322
- /** Get WebSocket client count */
323
- getWsClientCount() {
324
- return wsClients.size;
325
- },
326
- /** Get SSE client count */
327
- getSseClientCount() {
328
- return sseClients.size;
329
- },
330
- /** Stop the server */
178
+ wsClients: wsHandler.getClients(),
179
+ sseClients: sseHandler.getClients(),
180
+ getWsClientCount: () => wsHandler.size,
181
+ getSseClientCount: () => sseHandler.size,
331
182
  stop() {
332
- // Close all SSE connections
333
- for (const [, client] of sseClients) {
334
- try {
335
- client.controller.close();
336
- }
337
- catch {
338
- // Ignore
339
- }
340
- }
341
- sseClients.clear();
183
+ sseHandler.closeAll();
342
184
  void server.stop();
343
185
  httpLog.info('Server stopped');
344
186
  },
345
187
  };
346
188
  }
347
- /**
348
- * Route HTTP request to appropriate handler
349
- */
189
+ /** Route HTTP request to handler */
350
190
  async function routeRequest(req, path, ctx, corsOrigins) {
351
191
  const method = req.method;
352
192
  // Stats endpoint
353
193
  if (path === '/stats' && method === 'GET') {
354
- const stats = ctx.queueManager.getStats();
355
- const memStats = ctx.queueManager.getMemoryStats();
356
- const mem = process.memoryUsage();
357
- return jsonResponse({
358
- ok: true,
359
- stats: {
360
- ...stats,
361
- totalPushed: Number(stats.totalPushed),
362
- totalPulled: Number(stats.totalPulled),
363
- totalCompleted: Number(stats.totalCompleted),
364
- totalFailed: Number(stats.totalFailed),
365
- },
366
- memory: {
367
- heapUsed: Math.round(mem.heapUsed / 1024 / 1024),
368
- heapTotal: Math.round(mem.heapTotal / 1024 / 1024),
369
- rss: Math.round(mem.rss / 1024 / 1024),
370
- external: Math.round(mem.external / 1024 / 1024),
371
- arrayBuffers: Math.round(mem.arrayBuffers / 1024 / 1024),
372
- },
373
- collections: memStats,
374
- }, 200, corsOrigins);
194
+ return statsEndpoint(ctx.queueManager, corsOrigins);
375
195
  }
376
196
  // Metrics endpoint
377
197
  if (path === '/metrics' && method === 'GET') {
378
- const stats = ctx.queueManager.getStats();
379
- return jsonResponse({
380
- ok: true,
381
- metrics: {
382
- totalPushed: Number(stats.totalPushed),
383
- totalPulled: Number(stats.totalPulled),
384
- totalCompleted: Number(stats.totalCompleted),
385
- totalFailed: Number(stats.totalFailed),
386
- },
387
- }, 200, corsOrigins);
198
+ return metricsEndpoint(ctx.queueManager, corsOrigins);
388
199
  }
389
- // Queue operations: POST /queues/:queue/jobs
200
+ // Queue operations: POST/GET /queues/:queue/jobs
390
201
  const queueJobsMatch = path.match(/^\/queues\/([^/]+)\/jobs$/);
391
202
  if (queueJobsMatch) {
392
203
  const queue = decodeURIComponent(queueJobsMatch[1]);
@@ -403,7 +214,6 @@ async function routeRequest(req, path, ctx, corsOrigins) {
403
214
  return jsonResponse(response, response.ok ? 200 : 400, corsOrigins);
404
215
  }
405
216
  if (method === 'GET') {
406
- // Pull job
407
217
  const timeout = parseInt(new URL(req.url).searchParams.get('timeout') ?? '0');
408
218
  const cmd = { cmd: 'PULL', queue, timeout };
409
219
  const response = await handleCommand(cmd, ctx);
@@ -443,33 +253,6 @@ async function routeRequest(req, path, ctx, corsOrigins) {
443
253
  const response = await handleCommand(cmd, ctx);
444
254
  return jsonResponse(response, response.ok ? 200 : 400, corsOrigins);
445
255
  }
446
- // Not found
447
256
  return jsonResponse({ ok: false, error: 'Not found' }, 404, corsOrigins);
448
257
  }
449
- /** Create JSON response with CORS headers */
450
- function jsonResponse(data, status = 200, corsOrigins) {
451
- const headers = {
452
- 'Content-Type': 'application/json',
453
- };
454
- if (corsOrigins) {
455
- headers['Access-Control-Allow-Origin'] = corsOrigins.has('*')
456
- ? '*'
457
- : Array.from(corsOrigins).join(', ');
458
- }
459
- return new Response(JSON.stringify(data), { status, headers });
460
- }
461
- /** Create CORS preflight response */
462
- function corsResponse(corsOrigins) {
463
- return new Response(null, {
464
- status: 204,
465
- headers: {
466
- 'Access-Control-Allow-Origin': corsOrigins.has('*')
467
- ? '*'
468
- : Array.from(corsOrigins).join(', '),
469
- 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
470
- 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
471
- 'Access-Control-Max-Age': '86400',
472
- },
473
- });
474
- }
475
258
  //# sourceMappingURL=http.js.map