bunqueue 1.2.2 → 1.3.0

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.
@@ -0,0 +1,19 @@
1
+ /**
2
+ * QueueEvents - BullMQ-style event listener
3
+ */
4
+ import { EventEmitter } from 'events';
5
+ /**
6
+ * QueueEvents class for listening to queue events
7
+ * Provides a way to listen to events without processing jobs
8
+ */
9
+ export declare class QueueEvents extends EventEmitter {
10
+ readonly name: string;
11
+ private running;
12
+ private pollTimer;
13
+ private unsubscribe;
14
+ constructor(name: string);
15
+ private start;
16
+ /** Close the event listener */
17
+ close(): void;
18
+ }
19
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,WAAW,CAA6B;gBAEpC,IAAI,EAAE,MAAM;IAMxB,OAAO,CAAC,KAAK;IAkCb,+BAA+B;IAC/B,KAAK,IAAI,IAAI;CAYd"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * QueueEvents - BullMQ-style event listener
3
+ */
4
+ import { EventEmitter } from 'events';
5
+ import { getSharedManager } from './manager';
6
+ /**
7
+ * QueueEvents class for listening to queue events
8
+ * Provides a way to listen to events without processing jobs
9
+ */
10
+ export class QueueEvents extends EventEmitter {
11
+ name;
12
+ running = false;
13
+ pollTimer = null;
14
+ unsubscribe = null;
15
+ constructor(name) {
16
+ super();
17
+ this.name = name;
18
+ this.start();
19
+ }
20
+ start() {
21
+ if (this.running)
22
+ return;
23
+ this.running = true;
24
+ // Subscribe to events from QueueManager
25
+ const manager = getSharedManager();
26
+ const handler = (event) => {
27
+ if (event.queue !== this.name)
28
+ return;
29
+ switch (event.eventType) {
30
+ case "pushed" /* EventType.Pushed */:
31
+ this.emit('waiting', { jobId: event.jobId });
32
+ break;
33
+ case "pulled" /* EventType.Pulled */:
34
+ this.emit('active', { jobId: event.jobId });
35
+ break;
36
+ case "completed" /* EventType.Completed */:
37
+ this.emit('completed', { jobId: event.jobId, returnvalue: event.data });
38
+ break;
39
+ case "failed" /* EventType.Failed */:
40
+ this.emit('failed', { jobId: event.jobId, failedReason: event.data });
41
+ break;
42
+ case "progress" /* EventType.Progress */:
43
+ this.emit('progress', { jobId: event.jobId, data: event.data });
44
+ break;
45
+ case "stalled" /* EventType.Stalled */:
46
+ this.emit('stalled', { jobId: event.jobId });
47
+ break;
48
+ }
49
+ };
50
+ this.unsubscribe = manager.subscribe(handler);
51
+ }
52
+ /** Close the event listener */
53
+ close() {
54
+ this.running = false;
55
+ if (this.pollTimer) {
56
+ clearTimeout(this.pollTimer);
57
+ this.pollTimer = null;
58
+ }
59
+ if (this.unsubscribe) {
60
+ this.unsubscribe();
61
+ this.unsubscribe = null;
62
+ }
63
+ this.removeAllListeners();
64
+ }
65
+ }
66
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAClC,IAAI,CAAS;IACd,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAyC,IAAI,CAAC;IACvD,WAAW,GAAwB,IAAI,CAAC;IAEhD,YAAY,IAAY;QACtB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,wCAAwC;QACxC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO;YAEtC,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxB;oBACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7C,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACxE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAChE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7C,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,+BAA+B;IAC/B,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * bunqueue Client API
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Queue, Worker } from 'bunqueue/client';
7
+ *
8
+ * const queue = new Queue('emails');
9
+ * await queue.add('send', { to: 'user@test.com' });
10
+ *
11
+ * const worker = new Worker('emails', async (job) => {
12
+ * await job.updateProgress(50);
13
+ * await job.log('Processing...');
14
+ * return { success: true };
15
+ * });
16
+ *
17
+ * worker.on('completed', (job, result) => console.log(result));
18
+ * worker.on('progress', (job, progress) => console.log(progress));
19
+ * ```
20
+ */
21
+ export { Queue } from './queue';
22
+ export { Worker } from './worker';
23
+ export { QueueEvents } from './events';
24
+ export { shutdownManager } from './manager';
25
+ export type { Job, JobOptions, QueueOptions, WorkerOptions, Processor } from './types';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * bunqueue Client API
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Queue, Worker } from 'bunqueue/client';
7
+ *
8
+ * const queue = new Queue('emails');
9
+ * await queue.add('send', { to: 'user@test.com' });
10
+ *
11
+ * const worker = new Worker('emails', async (job) => {
12
+ * await job.updateProgress(50);
13
+ * await job.log('Processing...');
14
+ * return { success: true };
15
+ * });
16
+ *
17
+ * worker.on('completed', (job, result) => console.log(result));
18
+ * worker.on('progress', (job, progress) => console.log(progress));
19
+ * ```
20
+ */
21
+ export { Queue } from './queue';
22
+ export { Worker } from './worker';
23
+ export { QueueEvents } from './events';
24
+ export { shutdownManager } from './manager';
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared QueueManager singleton
3
+ */
4
+ import { QueueManager } from '../application/queueManager';
5
+ /** Get shared QueueManager instance */
6
+ export declare function getSharedManager(): QueueManager;
7
+ /** Shutdown shared manager */
8
+ export declare function shutdownManager(): void;
9
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/client/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAI3D,uCAAuC;AACvC,wBAAgB,gBAAgB,IAAI,YAAY,CAG/C;AAED,8BAA8B;AAC9B,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared QueueManager singleton
3
+ */
4
+ import { QueueManager } from '../application/queueManager';
5
+ let instance = null;
6
+ /** Get shared QueueManager instance */
7
+ export function getSharedManager() {
8
+ instance ??= new QueueManager();
9
+ return instance;
10
+ }
11
+ /** Shutdown shared manager */
12
+ export function shutdownManager() {
13
+ if (instance) {
14
+ instance.shutdown();
15
+ instance = null;
16
+ }
17
+ }
18
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/client/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,IAAI,QAAQ,GAAwB,IAAI,CAAC;AAEzC,uCAAuC;AACvC,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,KAAK,IAAI,YAAY,EAAE,CAAC;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,eAAe;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Queue - BullMQ-style API
3
+ */
4
+ import type { Job, JobOptions, QueueOptions } from './types';
5
+ /**
6
+ * Queue class for adding and managing jobs
7
+ */
8
+ export declare class Queue<T = unknown> {
9
+ readonly name: string;
10
+ private readonly opts;
11
+ constructor(name: string, opts?: QueueOptions);
12
+ /** Add a job to the queue */
13
+ add(name: string, data: T, opts?: JobOptions): Promise<Job<T>>;
14
+ /** Add multiple jobs */
15
+ addBulk(jobs: Array<{
16
+ name: string;
17
+ data: T;
18
+ opts?: JobOptions;
19
+ }>): Promise<Job<T>[]>;
20
+ /** Get a job by ID */
21
+ getJob(id: string): Promise<Job<T> | null>;
22
+ /** Remove a job by ID */
23
+ remove(id: string): void;
24
+ /** Get job counts by state */
25
+ getJobCounts(): {
26
+ waiting: number;
27
+ active: number;
28
+ completed: number;
29
+ failed: number;
30
+ };
31
+ /** Pause the queue */
32
+ pause(): void;
33
+ /** Resume the queue */
34
+ resume(): void;
35
+ /** Remove all waiting jobs */
36
+ drain(): void;
37
+ /** Remove all queue data (waiting, active, completed, failed) */
38
+ obliterate(): void;
39
+ /** Close the queue */
40
+ close(): Promise<void>;
41
+ }
42
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/client/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI7D;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;gBAExB,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB;IAKjD,6BAA6B;IACvB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAmBxE,wBAAwB;IAClB,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;IAQ3F,sBAAsB;IAChB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAQhD,yBAAyB;IACzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKxB,8BAA8B;IAC9B,YAAY,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAKtF,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAIb,uBAAuB;IACvB,MAAM,IAAI,IAAI;IAId,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IAIb,iEAAiE;IACjE,UAAU,IAAI,IAAI;IAIlB,sBAAsB;IAChB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Queue - BullMQ-style API
3
+ */
4
+ import { getSharedManager } from './manager';
5
+ import { toPublicJob } from './types';
6
+ import { jobId } from '../domain/types/job';
7
+ /**
8
+ * Queue class for adding and managing jobs
9
+ */
10
+ export class Queue {
11
+ name;
12
+ opts;
13
+ constructor(name, opts = {}) {
14
+ this.name = name;
15
+ this.opts = opts;
16
+ }
17
+ /** Add a job to the queue */
18
+ async add(name, data, opts = {}) {
19
+ const merged = { ...this.opts.defaultJobOptions, ...opts };
20
+ const manager = getSharedManager();
21
+ const job = await manager.push(this.name, {
22
+ data: { name, ...data },
23
+ priority: merged.priority,
24
+ delay: merged.delay,
25
+ maxAttempts: merged.attempts,
26
+ backoff: merged.backoff,
27
+ timeout: merged.timeout,
28
+ customId: merged.jobId,
29
+ removeOnComplete: merged.removeOnComplete,
30
+ removeOnFail: merged.removeOnFail,
31
+ });
32
+ return toPublicJob(job, name);
33
+ }
34
+ /** Add multiple jobs */
35
+ async addBulk(jobs) {
36
+ const results = [];
37
+ for (const { name, data, opts } of jobs) {
38
+ results.push(await this.add(name, data, opts));
39
+ }
40
+ return results;
41
+ }
42
+ /** Get a job by ID */
43
+ async getJob(id) {
44
+ const manager = getSharedManager();
45
+ const job = await manager.getJob(jobId(id));
46
+ if (!job)
47
+ return null;
48
+ const jobData = job.data;
49
+ return toPublicJob(job, jobData?.name ?? 'default');
50
+ }
51
+ /** Remove a job by ID */
52
+ remove(id) {
53
+ const manager = getSharedManager();
54
+ void manager.cancel(jobId(id));
55
+ }
56
+ /** Get job counts by state */
57
+ getJobCounts() {
58
+ const stats = getSharedManager().getStats();
59
+ return { waiting: stats.waiting, active: stats.active, completed: 0, failed: stats.dlq };
60
+ }
61
+ /** Pause the queue */
62
+ pause() {
63
+ getSharedManager().pause(this.name);
64
+ }
65
+ /** Resume the queue */
66
+ resume() {
67
+ getSharedManager().resume(this.name);
68
+ }
69
+ /** Remove all waiting jobs */
70
+ drain() {
71
+ getSharedManager().drain(this.name);
72
+ }
73
+ /** Remove all queue data (waiting, active, completed, failed) */
74
+ obliterate() {
75
+ getSharedManager().obliterate(this.name);
76
+ }
77
+ /** Close the queue */
78
+ async close() {
79
+ // No-op for embedded mode
80
+ }
81
+ }
82
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/client/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Client Types
3
+ */
4
+ import type { Job as InternalJob } from '../domain/types/job';
5
+ /** Job interface exposed to users */
6
+ export interface Job<T = unknown> {
7
+ id: string;
8
+ name: string;
9
+ data: T;
10
+ queueName: string;
11
+ attemptsMade: number;
12
+ timestamp: number;
13
+ progress: number;
14
+ returnvalue?: unknown;
15
+ failedReason?: string;
16
+ /** Update job progress (0-100) */
17
+ updateProgress(progress: number, message?: string): Promise<void>;
18
+ /** Log a message to the job */
19
+ log(message: string): Promise<void>;
20
+ }
21
+ /** Job options when adding to queue */
22
+ export interface JobOptions {
23
+ priority?: number;
24
+ delay?: number;
25
+ attempts?: number;
26
+ backoff?: number;
27
+ timeout?: number;
28
+ jobId?: string;
29
+ removeOnComplete?: boolean;
30
+ removeOnFail?: boolean;
31
+ }
32
+ /** Queue options */
33
+ export interface QueueOptions {
34
+ defaultJobOptions?: JobOptions;
35
+ }
36
+ /** Worker options */
37
+ export interface WorkerOptions {
38
+ concurrency?: number;
39
+ autorun?: boolean;
40
+ }
41
+ /** Job processor function */
42
+ export type Processor<T = unknown, R = unknown> = (job: Job<T>) => Promise<R> | R;
43
+ /** Queue events */
44
+ export type QueueEventType = 'waiting' | 'active' | 'completed' | 'failed' | 'progress' | 'removed' | 'drained';
45
+ /** Convert internal job to public job (with methods) */
46
+ export declare function createPublicJob<T>(job: InternalJob, name: string, updateProgress: (id: string, progress: number, message?: string) => Promise<void>, log: (id: string, message: string) => Promise<void>): Job<T>;
47
+ /** Simple public job without methods (for Queue.getJob) */
48
+ export declare function toPublicJob<T>(job: InternalJob, name: string): Job<T>;
49
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE9D,qCAAqC;AACrC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,+BAA+B;IAC/B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,oBAAoB;AACpB,MAAM,WAAW,YAAY;IAC3B,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAChC;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,6BAA6B;AAC7B,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAElF,mBAAmB;AACnB,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACjF,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,GAAG,CAAC,CAAC,CAAC,CAaR;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAarE"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Client Types
3
+ */
4
+ /** Convert internal job to public job (with methods) */
5
+ export function createPublicJob(job, name, updateProgress, log) {
6
+ const id = String(job.id);
7
+ return {
8
+ id,
9
+ name,
10
+ data: job.data,
11
+ queueName: job.queue,
12
+ attemptsMade: job.attempts,
13
+ timestamp: job.createdAt,
14
+ progress: job.progress,
15
+ updateProgress: (progress, message) => updateProgress(id, progress, message),
16
+ log: (message) => log(id, message),
17
+ };
18
+ }
19
+ /** Simple public job without methods (for Queue.getJob) */
20
+ export function toPublicJob(job, name) {
21
+ const id = String(job.id);
22
+ return {
23
+ id,
24
+ name,
25
+ data: job.data,
26
+ queueName: job.queue,
27
+ attemptsMade: job.attempts,
28
+ timestamp: job.createdAt,
29
+ progress: job.progress,
30
+ updateProgress: async () => { },
31
+ log: async () => { },
32
+ };
33
+ }
34
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyDH,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAC7B,GAAgB,EAChB,IAAY,EACZ,cAAiF,EACjF,GAAmD;IAEnD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO;QACL,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,GAAG,CAAC,IAAS;QACnB,SAAS,EAAE,GAAG,CAAC,KAAK;QACpB,YAAY,EAAE,GAAG,CAAC,QAAQ;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,cAAc,EAAE,CAAC,QAAgB,EAAE,OAAgB,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC7F,GAAG,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,WAAW,CAAI,GAAgB,EAAE,IAAY;IAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO;QACL,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,GAAG,CAAC,IAAS;QACnB,SAAS,EAAE,GAAG,CAAC,KAAK;QACpB,YAAY,EAAE,GAAG,CAAC,QAAQ;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,cAAc,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC9B,GAAG,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Worker - BullMQ-style API
3
+ */
4
+ import { EventEmitter } from 'events';
5
+ import type { WorkerOptions, Processor } from './types';
6
+ /**
7
+ * Worker class for processing jobs
8
+ */
9
+ export declare class Worker<T = unknown, R = unknown> extends EventEmitter {
10
+ readonly name: string;
11
+ private readonly opts;
12
+ private readonly processor;
13
+ private running;
14
+ private activeJobs;
15
+ private pollTimer;
16
+ constructor(name: string, processor: Processor<T, R>, opts?: WorkerOptions);
17
+ /** Start processing */
18
+ run(): void;
19
+ /** Pause processing */
20
+ pause(): void;
21
+ /** Resume processing */
22
+ resume(): void;
23
+ /** Close worker gracefully */
24
+ close(force?: boolean): Promise<void>;
25
+ private poll;
26
+ private tryProcess;
27
+ private processJob;
28
+ }
29
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKxD;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAA8C;gBAEnD,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,GAAE,aAAkB;IAc9E,uBAAuB;IACvB,GAAG,IAAI,IAAI;IAOX,uBAAuB;IACvB,KAAK,IAAI,IAAI;IAQb,wBAAwB;IACxB,MAAM,IAAI,IAAI;IAId,8BAA8B;IACxB,KAAK,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzC,OAAO,CAAC,IAAI;YAaE,UAAU;YAgCV,UAAU;CAiCzB"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Worker - BullMQ-style API
3
+ */
4
+ import { EventEmitter } from 'events';
5
+ import { getSharedManager } from './manager';
6
+ import { createPublicJob } from './types';
7
+ import { jobId } from '../domain/types/job';
8
+ /**
9
+ * Worker class for processing jobs
10
+ */
11
+ export class Worker extends EventEmitter {
12
+ name;
13
+ opts;
14
+ processor;
15
+ running = false;
16
+ activeJobs = 0;
17
+ pollTimer = null;
18
+ constructor(name, processor, opts = {}) {
19
+ super();
20
+ this.name = name;
21
+ this.processor = processor;
22
+ this.opts = {
23
+ concurrency: opts.concurrency ?? 1,
24
+ autorun: opts.autorun ?? true,
25
+ };
26
+ if (this.opts.autorun) {
27
+ this.run();
28
+ }
29
+ }
30
+ /** Start processing */
31
+ run() {
32
+ if (this.running)
33
+ return;
34
+ this.running = true;
35
+ this.emit('ready');
36
+ this.poll();
37
+ }
38
+ /** Pause processing */
39
+ pause() {
40
+ this.running = false;
41
+ if (this.pollTimer) {
42
+ clearTimeout(this.pollTimer);
43
+ this.pollTimer = null;
44
+ }
45
+ }
46
+ /** Resume processing */
47
+ resume() {
48
+ this.run();
49
+ }
50
+ /** Close worker gracefully */
51
+ async close(force = false) {
52
+ this.running = false;
53
+ if (this.pollTimer) {
54
+ clearTimeout(this.pollTimer);
55
+ this.pollTimer = null;
56
+ }
57
+ if (!force) {
58
+ while (this.activeJobs > 0) {
59
+ await new Promise((r) => setTimeout(r, 50));
60
+ }
61
+ }
62
+ this.emit('closed');
63
+ }
64
+ poll() {
65
+ if (!this.running)
66
+ return;
67
+ if (this.activeJobs >= this.opts.concurrency) {
68
+ this.pollTimer = setTimeout(() => {
69
+ this.poll();
70
+ }, 10);
71
+ return;
72
+ }
73
+ void this.tryProcess();
74
+ }
75
+ async tryProcess() {
76
+ if (!this.running)
77
+ return;
78
+ const manager = getSharedManager();
79
+ try {
80
+ const internalJob = await manager.pull(this.name, 0);
81
+ if (internalJob) {
82
+ this.activeJobs++;
83
+ void this.processJob(internalJob).finally(() => {
84
+ this.activeJobs--;
85
+ if (this.running)
86
+ this.poll();
87
+ });
88
+ if (this.activeJobs < this.opts.concurrency) {
89
+ setImmediate(() => {
90
+ void this.tryProcess();
91
+ });
92
+ }
93
+ }
94
+ else {
95
+ this.pollTimer = setTimeout(() => {
96
+ this.poll();
97
+ }, 50);
98
+ }
99
+ }
100
+ catch (err) {
101
+ this.emit('error', err);
102
+ this.pollTimer = setTimeout(() => {
103
+ this.poll();
104
+ }, 100);
105
+ }
106
+ }
107
+ async processJob(internalJob) {
108
+ const manager = getSharedManager();
109
+ const jobData = internalJob.data;
110
+ const name = jobData?.name ?? 'default';
111
+ // Create job with progress and log methods
112
+ const job = createPublicJob(internalJob, name, async (id, progress, message) => {
113
+ await manager.updateProgress(jobId(id), progress, message);
114
+ this.emit('progress', job, progress);
115
+ }, (id, message) => {
116
+ manager.addLog(jobId(id), message);
117
+ return Promise.resolve();
118
+ });
119
+ this.emit('active', job);
120
+ try {
121
+ const result = await this.processor(job);
122
+ await manager.ack(internalJob.id, result);
123
+ job.returnvalue = result;
124
+ this.emit('completed', job, result);
125
+ }
126
+ catch (error) {
127
+ const err = error instanceof Error ? error : new Error(String(error));
128
+ await manager.fail(internalJob.id, err.message);
129
+ job.failedReason = err.message;
130
+ this.emit('failed', job, err);
131
+ }
132
+ }
133
+ }
134
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunqueue",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "High-performance job queue server written in Bun. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks. Minimal dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
@@ -13,6 +13,10 @@
13
13
  "types": "./dist/main.d.ts",
14
14
  "import": "./dist/main.js"
15
15
  },
16
+ "./client": {
17
+ "types": "./dist/client/index.d.ts",
18
+ "import": "./dist/client/index.js"
19
+ },
16
20
  "./queue": {
17
21
  "types": "./dist/application/queueManager.d.ts",
18
22
  "import": "./dist/application/queueManager.js"