bunqueue 2.6.89 → 2.6.90

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
@@ -147,6 +147,56 @@ const worker = new Worker(
147
147
  await queue.add('process', { data: 'hello' });
148
148
  ```
149
149
 
150
+ ### Simple Mode
151
+
152
+ One object. Queue + Worker + Routes + Middleware + Cron. Zero boilerplate.
153
+
154
+ ```typescript
155
+ import { Bunqueue } from 'bunqueue/client';
156
+
157
+ const app = new Bunqueue('notifications', {
158
+ embedded: true,
159
+
160
+ // Route jobs by name
161
+ routes: {
162
+ 'send-email': async (job) => {
163
+ console.log(`Email to ${job.data.to}`);
164
+ return { sent: true };
165
+ },
166
+ 'send-sms': async (job) => {
167
+ console.log(`SMS to ${job.data.to}`);
168
+ return { sent: true };
169
+ },
170
+ },
171
+ concurrency: 10,
172
+ });
173
+
174
+ // Middleware — wraps every job (logging, timing, error recovery)
175
+ app.use(async (job, next) => {
176
+ const start = Date.now();
177
+ const result = await next();
178
+ console.log(`${job.name} took ${Date.now() - start}ms`);
179
+ return result;
180
+ });
181
+
182
+ // Cron — scheduled jobs
183
+ await app.cron('daily-report', '0 9 * * *', { type: 'summary' });
184
+ await app.every('healthcheck', 30000, { type: 'ping' });
185
+
186
+ // Events
187
+ app.on('completed', (job, result) => console.log(result));
188
+ app.on('failed', (job, err) => console.error(err));
189
+
190
+ // Add jobs
191
+ await app.add('send-email', { to: 'alice@example.com' });
192
+ await app.add('send-sms', { to: '+1234567890' });
193
+
194
+ // Graceful shutdown
195
+ await app.close();
196
+ ```
197
+
198
+ Works with both embedded and TCP mode. [Simple Mode docs →](https://bunqueue.dev/guide/simple-mode/)
199
+
150
200
  ## Performance
151
201
 
152
202
  SQLite handles surprisingly high throughput for single-node deployments:
@@ -220,6 +270,7 @@ docker compose --profile monitoring up -d
220
270
  **[Read the full documentation →](https://bunqueue.dev/)**
221
271
 
222
272
  - [Quick Start](https://bunqueue.dev/guide/quickstart/)
273
+ - [Simple Mode](https://bunqueue.dev/guide/simple-mode/)
223
274
  - [Queue API](https://bunqueue.dev/guide/queue/)
224
275
  - [Worker API](https://bunqueue.dev/guide/worker/)
225
276
  - [Server Mode](https://bunqueue.dev/guide/server/)
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Bunqueue - Simplified all-in-one Queue + Worker
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Bunqueue } from 'bunqueue/client';
7
+ *
8
+ * // Simple processor
9
+ * const q = new Bunqueue<{ email: string }>('emails', {
10
+ * processor: async (job) => {
11
+ * await job.updateProgress(50);
12
+ * return { sent: true };
13
+ * },
14
+ * concurrency: 5,
15
+ * });
16
+ *
17
+ * // Job routing
18
+ * const q2 = new Bunqueue('notifications', {
19
+ * routes: {
20
+ * 'send-email': async (job) => { ... },
21
+ * 'send-sms': async (job) => { ... },
22
+ * },
23
+ * });
24
+ *
25
+ * // Middleware
26
+ * q.use(async (job, next) => {
27
+ * const start = Date.now();
28
+ * const result = await next();
29
+ * console.log(`Done in ${Date.now() - start}ms`);
30
+ * return result;
31
+ * });
32
+ *
33
+ * // Cron
34
+ * q.cron('daily-report', '0 9 * * *', { type: 'summary' });
35
+ * ```
36
+ */
37
+ import { Queue } from './queue/queue';
38
+ import { Worker } from './worker/worker';
39
+ import type { Job, JobOptions, QueueOptions, WorkerOptions, Processor, ConnectionOptions } from './types';
40
+ import type { SchedulerInfo } from './queue/scheduler';
41
+ /** Middleware function: receives job and next(), returns result */
42
+ export type BunqueueMiddleware<T = unknown, R = unknown> = (job: Job<T>, next: () => Promise<R>) => Promise<R>;
43
+ export interface BunqueueOptions<T = unknown, R = unknown> {
44
+ /** Job processor function (use this OR routes, not both) */
45
+ processor?: Processor<T, R>;
46
+ /** Named job processors — routes jobs by name to the right handler */
47
+ routes?: Record<string, Processor<T, R>>;
48
+ /** Worker concurrency (default: 1) */
49
+ concurrency?: number;
50
+ /** Connection options for TCP mode */
51
+ connection?: ConnectionOptions;
52
+ /** Use embedded mode (default: auto-detect) */
53
+ embedded?: boolean;
54
+ /** SQLite data path (embedded mode) */
55
+ dataPath?: string;
56
+ /** Default job options */
57
+ defaultJobOptions?: JobOptions;
58
+ /** Worker auto-start (default: true) */
59
+ autorun?: boolean;
60
+ /** Heartbeat interval in ms (default: 10000, 0=disabled) */
61
+ heartbeatInterval?: number;
62
+ /** Worker batch size (default: 10) */
63
+ batchSize?: number;
64
+ /** Long poll timeout in ms (default: 0) */
65
+ pollTimeout?: number;
66
+ /** Auto-batching options (TCP mode) */
67
+ autoBatch?: QueueOptions['autoBatch'];
68
+ /** Rate limiter options */
69
+ limiter?: WorkerOptions['limiter'];
70
+ /** Remove job on complete */
71
+ removeOnComplete?: WorkerOptions['removeOnComplete'];
72
+ /** Remove job on fail */
73
+ removeOnFail?: WorkerOptions['removeOnFail'];
74
+ }
75
+ export declare class Bunqueue<T = unknown, R = unknown> {
76
+ readonly name: string;
77
+ readonly queue: Queue<T>;
78
+ readonly worker: Worker<T, R>;
79
+ private readonly middlewares;
80
+ private readonly baseProcessor;
81
+ constructor(name: string, opts: BunqueueOptions<T, R>);
82
+ /** Add middleware to the processing pipeline */
83
+ use(middleware: BunqueueMiddleware<T, R>): this;
84
+ private executeWithMiddleware;
85
+ add(name: string, data: T, opts?: JobOptions): Promise<Job<T>>;
86
+ addBulk(jobs: Array<{
87
+ name: string;
88
+ data: T;
89
+ opts?: JobOptions;
90
+ }>): Promise<Job<T>[]>;
91
+ getJob(id: string): Promise<Job<T> | null>;
92
+ getJobCounts(): import("./queue/operations").JobCounts;
93
+ getJobCountsAsync(): Promise<import("./queue/operations").JobCounts>;
94
+ count(): number;
95
+ countAsync(): Promise<number>;
96
+ /** Add a cron job */
97
+ cron(schedulerId: string, pattern: string, data?: T, opts?: {
98
+ timezone?: string;
99
+ jobOpts?: JobOptions;
100
+ }): Promise<SchedulerInfo | null>;
101
+ /** Add a repeating job (every N ms) */
102
+ every(schedulerId: string, intervalMs: number, data?: T, opts?: {
103
+ jobOpts?: JobOptions;
104
+ }): Promise<SchedulerInfo | null>;
105
+ /** Remove a cron/repeating job */
106
+ removeCron(schedulerId: string): Promise<boolean>;
107
+ /** List all cron/repeating jobs */
108
+ listCrons(): Promise<SchedulerInfo[]>;
109
+ on(event: 'ready' | 'drained' | 'closed', listener: () => void): this;
110
+ on(event: 'active', listener: (job: Job<T>) => void): this;
111
+ on(event: 'completed', listener: (job: Job<T>, result: R) => void): this;
112
+ on(event: 'failed', listener: (job: Job<T>, error: Error) => void): this;
113
+ on(event: 'progress', listener: (job: Job<T> | null, progress: number) => void): this;
114
+ on(event: 'stalled', listener: (jobId: string, reason: string) => void): this;
115
+ on(event: 'error', listener: (error: Error) => void): this;
116
+ once(event: 'ready' | 'drained' | 'closed', listener: () => void): this;
117
+ once(event: 'active', listener: (job: Job<T>) => void): this;
118
+ once(event: 'completed', listener: (job: Job<T>, result: R) => void): this;
119
+ once(event: 'failed', listener: (job: Job<T>, error: Error) => void): this;
120
+ off(event: any, listener: (...args: any[]) => void): this;
121
+ pause(): void;
122
+ resume(): void;
123
+ close(force?: boolean): Promise<void>;
124
+ isRunning(): boolean;
125
+ isPaused(): boolean;
126
+ isClosed(): boolean;
127
+ }
128
+ //# sourceMappingURL=bunqueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bunqueue.d.ts","sourceRoot":"","sources":["../../src/client/bunqueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,KAAK,EACV,GAAG,EACH,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,iBAAiB,EAElB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAA2B,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhF,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CACzD,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EACX,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KACnB,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACvD,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACrD,yBAAyB;IACzB,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CAC9C;AAED,qBAAa,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;gBAEpC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IA6DrD,gDAAgD;IAChD,GAAG,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAK/C,OAAO,CAAC,qBAAqB;IAyB7B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAI9D,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAIrF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAI1C,YAAY;IAIZ,iBAAiB;IAIjB,KAAK;IAIL,UAAU;IAMV,qBAAqB;IACrB,IAAI,CACF,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,CAAC,EACR,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,UAAU,CAAA;KAAE,GACjD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAUhC,uCAAuC;IACvC,KAAK,CACH,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,CAAC,EACR,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,UAAU,CAAA;KAAE,GAC9B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAUhC,kCAAkC;IAClC,UAAU,CAAC,WAAW,EAAE,MAAM;IAI9B,mCAAmC;IACnC,SAAS;IAMT,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IACrE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAC1D,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IACxE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IACxE,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IACrF,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAC7E,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAQ1D,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IACvE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAC5D,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAC1E,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAS1E,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAQzD,KAAK,IAAI,IAAI;IAKb,MAAM,IAAI,IAAI;IAKR,KAAK,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,OAAO;IAInB,QAAQ,IAAI,OAAO;CAGpB"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Bunqueue - Simplified all-in-one Queue + Worker
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Bunqueue } from 'bunqueue/client';
7
+ *
8
+ * // Simple processor
9
+ * const q = new Bunqueue<{ email: string }>('emails', {
10
+ * processor: async (job) => {
11
+ * await job.updateProgress(50);
12
+ * return { sent: true };
13
+ * },
14
+ * concurrency: 5,
15
+ * });
16
+ *
17
+ * // Job routing
18
+ * const q2 = new Bunqueue('notifications', {
19
+ * routes: {
20
+ * 'send-email': async (job) => { ... },
21
+ * 'send-sms': async (job) => { ... },
22
+ * },
23
+ * });
24
+ *
25
+ * // Middleware
26
+ * q.use(async (job, next) => {
27
+ * const start = Date.now();
28
+ * const result = await next();
29
+ * console.log(`Done in ${Date.now() - start}ms`);
30
+ * return result;
31
+ * });
32
+ *
33
+ * // Cron
34
+ * q.cron('daily-report', '0 9 * * *', { type: 'summary' });
35
+ * ```
36
+ */
37
+ import { Queue } from './queue/queue';
38
+ import { Worker } from './worker/worker';
39
+ export class Bunqueue {
40
+ name;
41
+ queue;
42
+ worker;
43
+ middlewares = [];
44
+ baseProcessor;
45
+ constructor(name, opts) {
46
+ if (!opts.processor && !opts.routes) {
47
+ throw new Error('Bunqueue requires either "processor" or "routes"');
48
+ }
49
+ if (opts.processor && opts.routes) {
50
+ throw new Error('Bunqueue: use "processor" or "routes", not both');
51
+ }
52
+ this.name = name;
53
+ // Build base processor from routes or single processor
54
+ if (opts.routes) {
55
+ const routeMap = opts.routes;
56
+ this.baseProcessor = ((job) => {
57
+ const handler = routeMap[job.name];
58
+ if (!handler) {
59
+ throw new Error(`No route for job "${job.name}" in queue "${name}"`);
60
+ }
61
+ return handler(job);
62
+ });
63
+ }
64
+ else if (opts.processor) {
65
+ this.baseProcessor = opts.processor;
66
+ }
67
+ else {
68
+ // Should never reach here due to validation above
69
+ throw new Error('Bunqueue requires either "processor" or "routes"');
70
+ }
71
+ // Wrapped processor that applies middleware chain
72
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
73
+ const self = this;
74
+ const wrappedProcessor = ((job) => self.executeWithMiddleware(job));
75
+ const queueOpts = {
76
+ connection: opts.connection,
77
+ embedded: opts.embedded,
78
+ dataPath: opts.dataPath,
79
+ defaultJobOptions: opts.defaultJobOptions,
80
+ autoBatch: opts.autoBatch,
81
+ };
82
+ const workerOpts = {
83
+ connection: opts.connection,
84
+ embedded: opts.embedded,
85
+ dataPath: opts.dataPath,
86
+ concurrency: opts.concurrency,
87
+ autorun: opts.autorun,
88
+ heartbeatInterval: opts.heartbeatInterval,
89
+ batchSize: opts.batchSize,
90
+ pollTimeout: opts.pollTimeout,
91
+ limiter: opts.limiter,
92
+ removeOnComplete: opts.removeOnComplete,
93
+ removeOnFail: opts.removeOnFail,
94
+ };
95
+ this.queue = new Queue(name, queueOpts);
96
+ this.worker = new Worker(name, wrappedProcessor, workerOpts);
97
+ }
98
+ // ============ Middleware ============
99
+ /** Add middleware to the processing pipeline */
100
+ use(middleware) {
101
+ this.middlewares.push(middleware);
102
+ return this;
103
+ }
104
+ executeWithMiddleware(job) {
105
+ const asJob = job;
106
+ if (this.middlewares.length === 0) {
107
+ const result = this.baseProcessor(job);
108
+ return result instanceof Promise ? result : Promise.resolve(result);
109
+ }
110
+ let index = 0;
111
+ const middlewares = this.middlewares;
112
+ const baseProcessor = this.baseProcessor;
113
+ const next = () => {
114
+ if (index < middlewares.length) {
115
+ const mw = middlewares[index++];
116
+ return mw(asJob, next);
117
+ }
118
+ const result = baseProcessor(job);
119
+ return result instanceof Promise ? result : Promise.resolve(result);
120
+ };
121
+ return next();
122
+ }
123
+ // ============ Queue Operations ============
124
+ add(name, data, opts) {
125
+ return this.queue.add(name, data, opts);
126
+ }
127
+ addBulk(jobs) {
128
+ return this.queue.addBulk(jobs);
129
+ }
130
+ getJob(id) {
131
+ return this.queue.getJob(id);
132
+ }
133
+ getJobCounts() {
134
+ return this.queue.getJobCounts();
135
+ }
136
+ getJobCountsAsync() {
137
+ return this.queue.getJobCountsAsync();
138
+ }
139
+ count() {
140
+ return this.queue.count();
141
+ }
142
+ countAsync() {
143
+ return this.queue.countAsync();
144
+ }
145
+ // ============ Cron ============
146
+ /** Add a cron job */
147
+ cron(schedulerId, pattern, data, opts) {
148
+ const repeatOpts = { pattern, timezone: opts?.timezone };
149
+ const jobTemplate = {
150
+ name: schedulerId,
151
+ data,
152
+ opts: opts?.jobOpts,
153
+ };
154
+ return this.queue.upsertJobScheduler(schedulerId, repeatOpts, jobTemplate);
155
+ }
156
+ /** Add a repeating job (every N ms) */
157
+ every(schedulerId, intervalMs, data, opts) {
158
+ const repeatOpts = { every: intervalMs };
159
+ const jobTemplate = {
160
+ name: schedulerId,
161
+ data,
162
+ opts: opts?.jobOpts,
163
+ };
164
+ return this.queue.upsertJobScheduler(schedulerId, repeatOpts, jobTemplate);
165
+ }
166
+ /** Remove a cron/repeating job */
167
+ removeCron(schedulerId) {
168
+ return this.queue.removeJobScheduler(schedulerId);
169
+ }
170
+ /** List all cron/repeating jobs */
171
+ listCrons() {
172
+ return this.queue.getJobSchedulers();
173
+ }
174
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
175
+ on(event, listener) {
176
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
177
+ this.worker.on(event, listener);
178
+ return this;
179
+ }
180
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
181
+ once(event, listener) {
182
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
183
+ this.worker.once(event, listener);
184
+ return this;
185
+ }
186
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
187
+ off(event, listener) {
188
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
189
+ this.worker.off(event, listener);
190
+ return this;
191
+ }
192
+ // ============ Control ============
193
+ pause() {
194
+ this.queue.pause();
195
+ this.worker.pause();
196
+ }
197
+ resume() {
198
+ this.queue.resume();
199
+ this.worker.resume();
200
+ }
201
+ async close(force = false) {
202
+ await this.worker.close(force);
203
+ this.queue.close();
204
+ }
205
+ isRunning() {
206
+ return this.worker.isRunning();
207
+ }
208
+ isPaused() {
209
+ return this.worker.isPaused();
210
+ }
211
+ isClosed() {
212
+ return this.worker.isClosed();
213
+ }
214
+ }
215
+ //# sourceMappingURL=bunqueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bunqueue.js","sourceRoot":"","sources":["../../src/client/bunqueue.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@
20
20
  */
21
21
  export { Queue } from './queue';
22
22
  export { Worker } from './worker';
23
+ export { Bunqueue } from './bunqueue';
24
+ export type { BunqueueOptions, BunqueueMiddleware } from './bunqueue';
23
25
  export { SandboxedWorker } from './sandboxedWorker';
24
26
  export { QueueEvents } from './events';
25
27
  export { QueueGroup } from './queueGroup';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClF,YAAY,EACV,GAAG,EACH,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACpG,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClF,YAAY,EACV,GAAG,EACH,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACpG,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -20,6 +20,7 @@
20
20
  */
21
21
  export { Queue } from './queue';
22
22
  export { Worker } from './worker';
23
+ export { Bunqueue } from './bunqueue';
23
24
  export { SandboxedWorker } from './sandboxedWorker';
24
25
  export { QueueEvents } from './events';
25
26
  export { QueueGroup } from './queueGroup';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunqueue",
3
- "version": "2.6.89",
3
+ "version": "2.6.90",
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",