bunqueue 2.5.4 → 2.5.5

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.
package/README.md CHANGED
@@ -156,7 +156,8 @@ bunqueue is the **first job queue with native MCP support**. AI agents get a ful
156
156
  - **Full pull/ack/fail cycle** — agents can consume and process jobs directly
157
157
  - **Monitor everything** — stats, memory, Prometheus metrics, logs, DLQ
158
158
  - **Control flow** — pause/resume queues, set rate limits, manage concurrency
159
- - **70 MCP tools + 5 resources + 3 prompts** — complete control over every feature
159
+ - **73 MCP tools + 5 resources + 3 prompts** — complete control over every feature
160
+ - **HTTP handlers** — register a URL, bunqueue auto-processes jobs via HTTP calls
160
161
 
161
162
  ```bash
162
163
  # One command to connect Claude Code
@@ -0,0 +1,24 @@
1
+ /**
2
+ * HTTP Handler Registry
3
+ * Spawns embedded Workers that auto-process jobs via HTTP calls.
4
+ * Allows AI agents to register handlers so cron/queued jobs execute automatically.
5
+ */
6
+ export interface HttpHandler {
7
+ url: string;
8
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE';
9
+ headers?: Record<string, string>;
10
+ body?: unknown;
11
+ timeoutMs?: number;
12
+ }
13
+ export declare class HttpHandlerRegistry {
14
+ private readonly handlers;
15
+ register(queue: string, handler: HttpHandler): void;
16
+ unregister(queue: string): boolean;
17
+ list(): Array<{
18
+ queue: string;
19
+ handler: HttpHandler;
20
+ active: boolean;
21
+ }>;
22
+ shutdown(): void;
23
+ }
24
+ //# sourceMappingURL=httpHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHandler.d.ts","sourceRoot":"","sources":["../../src/mcp/httpHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAqDnD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IASlC,IAAI,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAYvE,QAAQ,IAAI,IAAI;CAMjB"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * HTTP Handler Registry
3
+ * Spawns embedded Workers that auto-process jobs via HTTP calls.
4
+ * Allows AI agents to register handlers so cron/queued jobs execute automatically.
5
+ */
6
+ import { Worker } from '../client/worker/worker';
7
+ export class HttpHandlerRegistry {
8
+ handlers = new Map();
9
+ register(queue, handler) {
10
+ // Stop existing handler on this queue if any
11
+ if (this.handlers.has(queue)) {
12
+ this.unregister(queue);
13
+ }
14
+ const timeout = handler.timeoutMs ?? 30_000;
15
+ const worker = new Worker(queue, async (job) => {
16
+ const controller = new AbortController();
17
+ const timer = setTimeout(() => {
18
+ controller.abort();
19
+ }, timeout);
20
+ try {
21
+ const init = {
22
+ method: handler.method,
23
+ headers: {
24
+ 'Content-Type': 'application/json',
25
+ ...handler.headers,
26
+ },
27
+ signal: controller.signal,
28
+ };
29
+ if (handler.method !== 'GET' && handler.method !== 'DELETE') {
30
+ init.body = JSON.stringify(handler.body ?? job.data);
31
+ }
32
+ const res = await fetch(handler.url, init);
33
+ const contentType = res.headers.get('content-type') ?? '';
34
+ const resBody = contentType.includes('json')
35
+ ? await res.json()
36
+ : await res.text();
37
+ if (!res.ok) {
38
+ throw new Error(`HTTP ${res.status}: ${typeof resBody === 'string' ? resBody : JSON.stringify(resBody)}`);
39
+ }
40
+ return { status: res.status, body: resBody };
41
+ }
42
+ finally {
43
+ clearTimeout(timer);
44
+ }
45
+ }, { embedded: true, concurrency: 1 });
46
+ this.handlers.set(queue, { handler, worker });
47
+ }
48
+ unregister(queue) {
49
+ const entry = this.handlers.get(queue);
50
+ if (!entry)
51
+ return false;
52
+ void entry.worker.close(true);
53
+ this.handlers.delete(queue);
54
+ return true;
55
+ }
56
+ list() {
57
+ const result = [];
58
+ for (const [queue, entry] of this.handlers) {
59
+ result.push({
60
+ queue,
61
+ handler: entry.handler,
62
+ active: entry.worker.isRunning(),
63
+ });
64
+ }
65
+ return result;
66
+ }
67
+ shutdown() {
68
+ for (const [, entry] of this.handlers) {
69
+ void entry.worker.close(true);
70
+ }
71
+ this.handlers.clear();
72
+ }
73
+ }
74
+ //# sourceMappingURL=httpHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHandler.js","sourceRoot":"","sources":["../../src/mcp/httpHandler.ts"],"names":[],"mappings":"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"}
package/dist/mcp/index.js CHANGED
@@ -56,6 +56,8 @@ import { registerWebhookTools } from './tools/webhookTools';
56
56
  import { registerWorkerMgmtTools } from './tools/workerMgmtTools';
57
57
  import { registerMonitoringTools } from './tools/monitoringTools';
58
58
  import { registerFlowTools } from './tools/flowTools';
59
+ import { registerHandlerTools } from './tools/handlerTools';
60
+ import { HttpHandlerRegistry } from './httpHandler';
59
61
  import { registerPrompts } from './prompts';
60
62
  async function main() {
61
63
  const backend = await createBackend();
@@ -64,7 +66,8 @@ async function main() {
64
66
  name: 'bunqueue-mcp',
65
67
  version: VERSION,
66
68
  });
67
- // Register all tools (70 total) and prompts (3)
69
+ const handlerRegistry = new HttpHandlerRegistry();
70
+ // Register all tools (73 total) and prompts (3)
68
71
  registerJobTools(server, backend);
69
72
  registerJobMgmtTools(server, backend);
70
73
  registerConsumptionTools(server, backend);
@@ -76,12 +79,14 @@ async function main() {
76
79
  registerWorkerMgmtTools(server, backend);
77
80
  registerMonitoringTools(server, backend);
78
81
  registerFlowTools(server, backend);
82
+ registerHandlerTools(server, handlerRegistry);
79
83
  // Register resources and prompts
80
84
  registerResources(server, backend);
81
85
  registerPrompts(server, backend);
82
86
  // Graceful shutdown — allow backend and transport to flush before exit
83
87
  const shutdown = async () => {
84
88
  try {
89
+ handlerRegistry.shutdown();
85
90
  backend.shutdown();
86
91
  await server.close();
87
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tools - HTTP Handler Management
3
+ * Register, unregister, list HTTP handlers that auto-process jobs.
4
+ */
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type { HttpHandlerRegistry } from '../httpHandler';
7
+ export declare function registerHandlerTools(server: McpServer, registry: HttpHandlerRegistry): void;
8
+ //# sourceMappingURL=handlerTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlerTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/handlerTools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,QA+EpF"}
@@ -0,0 +1,67 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated, @typescript-eslint/require-await */
2
+ /**
3
+ * MCP Tools - HTTP Handler Management
4
+ * Register, unregister, list HTTP handlers that auto-process jobs.
5
+ */
6
+ import { z } from 'zod';
7
+ import { withErrorHandler } from './withErrorHandler';
8
+ export function registerHandlerTools(server, registry) {
9
+ server.tool('bunqueue_register_handler', 'Register an HTTP handler on a queue. Spawns a worker that auto-processes jobs by making HTTP requests. Combine with bunqueue_add_cron for recurring tasks.', {
10
+ queue: z.string().describe('Queue name to attach the handler to'),
11
+ url: z.string().url().describe('HTTP endpoint URL to call when a job is processed'),
12
+ method: z
13
+ .enum(['GET', 'POST', 'PUT', 'DELETE'])
14
+ .describe('HTTP method (GET, POST, PUT, DELETE)'),
15
+ headers: z.record(z.string(), z.string()).optional().describe('Custom HTTP headers'),
16
+ body: z
17
+ .unknown()
18
+ .optional()
19
+ .describe('Request body template for POST/PUT (defaults to job data)'),
20
+ timeoutMs: z
21
+ .number()
22
+ .min(1000)
23
+ .max(120000)
24
+ .optional()
25
+ .describe('Request timeout in ms (default: 30000)'),
26
+ }, withErrorHandler(async ({ queue, url, method, headers, body, timeoutMs }) => {
27
+ registry.register(queue, { url, method, headers, body, timeoutMs });
28
+ return {
29
+ content: [
30
+ {
31
+ type: 'text',
32
+ text: JSON.stringify({
33
+ success: true,
34
+ queue,
35
+ handler: { url, method, timeoutMs: timeoutMs ?? 30000 },
36
+ message: `Worker started. Jobs in "${queue}" will be processed via ${method} ${url}`,
37
+ }, null, 2),
38
+ },
39
+ ],
40
+ };
41
+ }));
42
+ server.tool('bunqueue_unregister_handler', 'Remove an HTTP handler from a queue and stop its worker.', {
43
+ queue: z.string().describe('Queue name to remove the handler from'),
44
+ }, withErrorHandler(async ({ queue }) => {
45
+ const removed = registry.unregister(queue);
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text',
50
+ text: JSON.stringify({ success: removed, queue }),
51
+ },
52
+ ],
53
+ };
54
+ }));
55
+ server.tool('bunqueue_list_handlers', 'List all active HTTP handlers and their workers.', {}, withErrorHandler(async () => {
56
+ const handlers = registry.list();
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: JSON.stringify({ count: handlers.length, handlers }, null, 2),
62
+ },
63
+ ],
64
+ };
65
+ }));
66
+ }
67
+ //# sourceMappingURL=handlerTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlerTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/handlerTools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunqueue",
3
- "version": "2.5.4",
3
+ "version": "2.5.5",
4
4
  "description": "High-performance job queue for Bun & AI agents. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks, native MCP server. Zero external dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",