bunqueue 2.6.89 → 2.6.91

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 (42) hide show
  1. package/README.md +51 -0
  2. package/dist/client/bunqueue/aging.d.ts +16 -0
  3. package/dist/client/bunqueue/aging.d.ts.map +1 -0
  4. package/dist/client/bunqueue/aging.js +53 -0
  5. package/dist/client/bunqueue/aging.js.map +1 -0
  6. package/dist/client/bunqueue/batch.d.ts +17 -0
  7. package/dist/client/bunqueue/batch.d.ts.map +1 -0
  8. package/dist/client/bunqueue/batch.js +60 -0
  9. package/dist/client/bunqueue/batch.js.map +1 -0
  10. package/dist/client/bunqueue/cancellation.d.ts +20 -0
  11. package/dist/client/bunqueue/cancellation.d.ts.map +1 -0
  12. package/dist/client/bunqueue/cancellation.js +48 -0
  13. package/dist/client/bunqueue/cancellation.js.map +1 -0
  14. package/dist/client/bunqueue/circuitBreaker.d.ts +21 -0
  15. package/dist/client/bunqueue/circuitBreaker.d.ts.map +1 -0
  16. package/dist/client/bunqueue/circuitBreaker.js +68 -0
  17. package/dist/client/bunqueue/circuitBreaker.js.map +1 -0
  18. package/dist/client/bunqueue/retry.d.ts +9 -0
  19. package/dist/client/bunqueue/retry.d.ts.map +1 -0
  20. package/dist/client/bunqueue/retry.js +55 -0
  21. package/dist/client/bunqueue/retry.js.map +1 -0
  22. package/dist/client/bunqueue/triggers.d.ts +18 -0
  23. package/dist/client/bunqueue/triggers.d.ts.map +1 -0
  24. package/dist/client/bunqueue/triggers.js +42 -0
  25. package/dist/client/bunqueue/triggers.js.map +1 -0
  26. package/dist/client/bunqueue/ttl.d.ts +18 -0
  27. package/dist/client/bunqueue/ttl.d.ts.map +1 -0
  28. package/dist/client/bunqueue/ttl.js +31 -0
  29. package/dist/client/bunqueue/ttl.js.map +1 -0
  30. package/dist/client/bunqueue/types.d.ts +106 -0
  31. package/dist/client/bunqueue/types.d.ts.map +1 -0
  32. package/dist/client/bunqueue/types.js +5 -0
  33. package/dist/client/bunqueue/types.js.map +1 -0
  34. package/dist/client/bunqueue.d.ts +78 -0
  35. package/dist/client/bunqueue.d.ts.map +1 -0
  36. package/dist/client/bunqueue.js +248 -0
  37. package/dist/client/bunqueue.js.map +1 -0
  38. package/dist/client/index.d.ts +2 -0
  39. package/dist/client/index.d.ts.map +1 -1
  40. package/dist/client/index.js +1 -0
  41. package/dist/client/index.js.map +1 -1
  42. package/package.json +1 -1
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,16 @@
1
+ /**
2
+ * Bunqueue — Priority Aging
3
+ * Automatically boosts priority of old waiting jobs.
4
+ */
5
+ import type { Queue } from '../queue/queue';
6
+ import type { PriorityAgingConfig } from './types';
7
+ export declare class PriorityAger<T = unknown> {
8
+ private timer;
9
+ private readonly config;
10
+ private readonly queue;
11
+ constructor(config: PriorityAgingConfig, queue: Queue<T>);
12
+ start(): void;
13
+ private tick;
14
+ destroy(): void;
15
+ }
16
+ //# sourceMappingURL=aging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aging.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/aging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,qBAAa,YAAY,CAAC,CAAC,GAAG,OAAO;IACnC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;gBAErB,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAKxD,KAAK,IAAI,IAAI;YAOC,IAAI;IA6BlB,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Bunqueue — Priority Aging
3
+ * Automatically boosts priority of old waiting jobs.
4
+ */
5
+ export class PriorityAger {
6
+ timer = null;
7
+ config;
8
+ queue;
9
+ constructor(config, queue) {
10
+ this.config = config;
11
+ this.queue = queue;
12
+ }
13
+ start() {
14
+ const interval = this.config.interval ?? 60000;
15
+ this.timer = setInterval(() => {
16
+ void this.tick();
17
+ }, interval);
18
+ }
19
+ async tick() {
20
+ const minAge = this.config.minAge ?? 60000;
21
+ const boost = this.config.boost ?? 1;
22
+ const maxPriority = this.config.maxPriority ?? 100;
23
+ const maxScan = this.config.maxScan ?? 100;
24
+ // Get both waiting and prioritized jobs (jobs with priority > 0 are "prioritized")
25
+ const [waiting, prioritized] = await Promise.all([
26
+ this.queue.getWaitingAsync(0, maxScan),
27
+ this.queue.getJobsAsync({ state: 'prioritized', start: 0, end: maxScan }),
28
+ ]);
29
+ const jobs = [...waiting, ...prioritized];
30
+ const now = Date.now();
31
+ for (const job of jobs) {
32
+ const age = now - job.timestamp;
33
+ if (age >= minAge && job.priority < maxPriority) {
34
+ const newPriority = Math.min(job.priority + boost, maxPriority);
35
+ try {
36
+ await this.queue.changeJobPriority(job.id, {
37
+ priority: newPriority,
38
+ });
39
+ }
40
+ catch {
41
+ // Best-effort — job may have been processed
42
+ }
43
+ }
44
+ }
45
+ }
46
+ destroy() {
47
+ if (this.timer) {
48
+ clearInterval(this.timer);
49
+ this.timer = null;
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=aging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aging.js","sourceRoot":"","sources":["../../../src/client/bunqueue/aging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,OAAO,YAAY;IACf,KAAK,GAA0C,IAAI,CAAC;IAC3C,MAAM,CAAsB;IAC5B,KAAK,CAAW;IAEjC,YAAY,MAA2B,EAAE,KAAe;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;QAE3C,mFAAmF;QACnF,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SAC1E,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;YAChC,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAChD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC;gBAChE,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE;wBACzC,QAAQ,EAAE,WAAW;qBACtB,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,4CAA4C;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Bunqueue — Batch Processing
3
+ * Accumulates jobs and processes them in groups.
4
+ */
5
+ import type { Processor } from '../types';
6
+ import type { BatchConfig } from './types';
7
+ export declare class BatchAccumulator<T = unknown, R = unknown> {
8
+ private readonly buffer;
9
+ private timer;
10
+ private readonly config;
11
+ constructor(config: BatchConfig<T, R>);
12
+ /** Build a Processor that buffers jobs into batches */
13
+ buildProcessor(): Processor<T, R>;
14
+ flush(): void;
15
+ destroy(): void;
16
+ }
17
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/batch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQ3C,qBAAa,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAIrC,uDAAuD;IACvD,cAAc,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAiBjC,KAAK,IAAI,IAAI;IAyBb,OAAO,IAAI,IAAI;CAUhB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Bunqueue — Batch Processing
3
+ * Accumulates jobs and processes them in groups.
4
+ */
5
+ export class BatchAccumulator {
6
+ buffer = [];
7
+ timer = null;
8
+ config;
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ /** Build a Processor that buffers jobs into batches */
13
+ buildProcessor() {
14
+ return ((job) => {
15
+ return new Promise((resolve, reject) => {
16
+ this.buffer.push({ job, resolve, reject });
17
+ if (this.buffer.length >= this.config.size) {
18
+ this.flush();
19
+ }
20
+ else if (!this.timer) {
21
+ const timeout = this.config.timeout ?? 5000;
22
+ this.timer = setTimeout(() => {
23
+ this.flush();
24
+ }, timeout);
25
+ }
26
+ });
27
+ });
28
+ }
29
+ flush() {
30
+ if (this.timer) {
31
+ clearTimeout(this.timer);
32
+ this.timer = null;
33
+ }
34
+ const batch = this.buffer.splice(0);
35
+ if (batch.length === 0)
36
+ return;
37
+ const jobs = batch.map((b) => b.job);
38
+ this.config.processor(jobs).then((results) => {
39
+ for (let i = 0; i < batch.length; i++) {
40
+ batch[i].resolve(results[i] ?? undefined);
41
+ }
42
+ }, (err) => {
43
+ const error = err instanceof Error ? err : new Error(String(err));
44
+ for (const b of batch) {
45
+ b.reject(error);
46
+ }
47
+ });
48
+ }
49
+ destroy() {
50
+ if (this.timer) {
51
+ clearTimeout(this.timer);
52
+ this.timer = null;
53
+ }
54
+ // Flush remaining
55
+ if (this.buffer.length > 0) {
56
+ this.flush();
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/client/bunqueue/batch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,OAAO,gBAAgB;IACV,MAAM,GAAwB,EAAE,CAAC;IAC1C,KAAK,GAAyC,IAAI,CAAC;IAC1C,MAAM,CAAoB;IAE3C,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,uDAAuD;IACvD,cAAc;QACZ,OAAO,CAAC,CAAC,GAAyB,EAAc,EAAE;YAChD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE3C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,CAAC;qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;oBAC5C,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,CAAC,EAAE,OAAO,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAoB,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAwB,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAC9B,CAAC,OAAO,EAAE,EAAE;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAK,SAA0B,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,EACD,CAAC,GAAY,EAAE,EAAE;YACf,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,kBAAkB;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Bunqueue — Graceful Job Cancellation
3
+ * AbortController-based cancellation with optional grace period.
4
+ */
5
+ export declare class CancellationManager {
6
+ private readonly controllers;
7
+ /** Register a new AbortController for a job */
8
+ register(jobId: string): AbortController;
9
+ /** Remove a job's controller (on completion) */
10
+ unregister(jobId: string): void;
11
+ /** Cancel a job with optional grace period */
12
+ cancel(jobId: string, gracePeriodMs?: number): void;
13
+ /** Check if a job is cancelled */
14
+ isCancelled(jobId: string): boolean;
15
+ /** Get the AbortSignal for a job */
16
+ getSignal(jobId: string): AbortSignal | null;
17
+ /** Cancel all and clear */
18
+ destroyAll(): void;
19
+ }
20
+ //# sourceMappingURL=cancellation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancellation.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/cancellation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAElE,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAMxC,gDAAgD;IAChD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,8CAA8C;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,IAAI;IAa9C,kCAAkC;IAClC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKnC,oCAAoC;IACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAI5C,2BAA2B;IAC3B,UAAU,IAAI,IAAI;CAMnB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Bunqueue — Graceful Job Cancellation
3
+ * AbortController-based cancellation with optional grace period.
4
+ */
5
+ export class CancellationManager {
6
+ controllers = new Map();
7
+ /** Register a new AbortController for a job */
8
+ register(jobId) {
9
+ const ac = new AbortController();
10
+ this.controllers.set(jobId, ac);
11
+ return ac;
12
+ }
13
+ /** Remove a job's controller (on completion) */
14
+ unregister(jobId) {
15
+ this.controllers.delete(jobId);
16
+ }
17
+ /** Cancel a job with optional grace period */
18
+ cancel(jobId, gracePeriodMs = 0) {
19
+ const ac = this.controllers.get(jobId);
20
+ if (!ac)
21
+ return;
22
+ if (gracePeriodMs > 0) {
23
+ setTimeout(() => {
24
+ ac.abort();
25
+ }, gracePeriodMs);
26
+ }
27
+ else {
28
+ ac.abort();
29
+ }
30
+ }
31
+ /** Check if a job is cancelled */
32
+ isCancelled(jobId) {
33
+ const ac = this.controllers.get(jobId);
34
+ return ac ? ac.signal.aborted : false;
35
+ }
36
+ /** Get the AbortSignal for a job */
37
+ getSignal(jobId) {
38
+ return this.controllers.get(jobId)?.signal ?? null;
39
+ }
40
+ /** Cancel all and clear */
41
+ destroyAll() {
42
+ for (const ac of this.controllers.values()) {
43
+ ac.abort();
44
+ }
45
+ this.controllers.clear();
46
+ }
47
+ }
48
+ //# sourceMappingURL=cancellation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancellation.js","sourceRoot":"","sources":["../../../src/client/bunqueue/cancellation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,mBAAmB;IACb,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IAElE,+CAA+C;IAC/C,QAAQ,CAAC,KAAa;QACpB,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gDAAgD;IAChD,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,8CAA8C;IAC9C,MAAM,CAAC,KAAa,EAAE,aAAa,GAAG,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAEhB,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,CAAC,EAAE,aAAa,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,WAAW,CAAC,KAAa;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACxC,CAAC;IAED,oCAAoC;IACpC,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;IACrD,CAAC;IAED,2BAA2B;IAC3B,UAAU;QACR,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Bunqueue — Circuit Breaker for worker protection
3
+ */
4
+ import type { Worker } from '../worker/worker';
5
+ import type { CircuitBreakerConfig, CircuitState } from './types';
6
+ export declare class WorkerCircuitBreaker {
7
+ private state;
8
+ private failures;
9
+ private timer;
10
+ private readonly config;
11
+ private readonly worker;
12
+ constructor(config: CircuitBreakerConfig, worker: Worker);
13
+ get currentState(): CircuitState;
14
+ isOpen(): boolean;
15
+ onSuccess(): void;
16
+ onFailure(): void;
17
+ private open;
18
+ reset(): void;
19
+ destroy(): void;
20
+ }
21
+ //# sourceMappingURL=circuitBreaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuitBreaker.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/circuitBreaker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAElE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAKxD,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,MAAM,IAAI,OAAO;IAIjB,SAAS,IAAI,IAAI;IAUjB,SAAS,IAAI,IAAI;IASjB,OAAO,CAAC,IAAI;IAcZ,KAAK,IAAI,IAAI;IAYb,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Bunqueue — Circuit Breaker for worker protection
3
+ */
4
+ export class WorkerCircuitBreaker {
5
+ state = 'closed';
6
+ failures = 0;
7
+ timer = null;
8
+ config;
9
+ worker;
10
+ constructor(config, worker) {
11
+ this.config = config;
12
+ this.worker = worker;
13
+ }
14
+ get currentState() {
15
+ return this.state;
16
+ }
17
+ isOpen() {
18
+ return this.state === 'open';
19
+ }
20
+ onSuccess() {
21
+ if (this.state === 'half-open') {
22
+ this.state = 'closed';
23
+ this.failures = 0;
24
+ this.config.onClose?.();
25
+ }
26
+ else if (this.state === 'closed') {
27
+ this.failures = 0;
28
+ }
29
+ }
30
+ onFailure() {
31
+ this.failures++;
32
+ const threshold = this.config.threshold ?? 5;
33
+ if (this.state === 'half-open' || this.failures >= threshold) {
34
+ this.open();
35
+ }
36
+ }
37
+ open() {
38
+ this.state = 'open';
39
+ this.config.onOpen?.(this.failures);
40
+ this.worker.pause();
41
+ const resetTimeout = this.config.resetTimeout ?? 30000;
42
+ if (this.timer)
43
+ clearTimeout(this.timer);
44
+ this.timer = setTimeout(() => {
45
+ this.state = 'half-open';
46
+ this.config.onHalfOpen?.();
47
+ this.worker.resume();
48
+ }, resetTimeout);
49
+ }
50
+ reset() {
51
+ this.state = 'closed';
52
+ this.failures = 0;
53
+ if (this.timer) {
54
+ clearTimeout(this.timer);
55
+ this.timer = null;
56
+ }
57
+ if (this.worker.isPaused()) {
58
+ this.worker.resume();
59
+ }
60
+ }
61
+ destroy() {
62
+ if (this.timer) {
63
+ clearTimeout(this.timer);
64
+ this.timer = null;
65
+ }
66
+ }
67
+ }
68
+ //# sourceMappingURL=circuitBreaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuitBreaker.js","sourceRoot":"","sources":["../../../src/client/bunqueue/circuitBreaker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,OAAO,oBAAoB;IACvB,KAAK,GAAiB,QAAQ,CAAC;IAC/B,QAAQ,GAAG,CAAC,CAAC;IACb,KAAK,GAAyC,IAAI,CAAC;IAC1C,MAAM,CAAuB;IAC7B,MAAM,CAAS;IAEhC,YAAY,MAA4B,EAAE,MAAc;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;IAC/B,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,SAAS;QACP,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC;QACvD,IAAI,IAAI,CAAC,KAAK;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC,EAAE,YAAY,CAAC,CAAC;IACnB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Bunqueue — Advanced Retry with backoff strategies
3
+ */
4
+ import type { RetryConfig, RetryStrategy } from './types';
5
+ /** Calculate backoff delay based on strategy */
6
+ export declare function calculateBackoff(strategy: RetryStrategy, attempt: number, baseDelay: number, error: Error, config: RetryConfig): number;
7
+ /** Execute a function with retry logic */
8
+ export declare function executeWithRetry<R>(fn: () => Promise<R>, config: RetryConfig): Promise<R>;
9
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE1D,gDAAgD;AAChD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,GAClB,MAAM,CAiCR;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBzF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Bunqueue — Advanced Retry with backoff strategies
3
+ */
4
+ /** Calculate backoff delay based on strategy */
5
+ export function calculateBackoff(strategy, attempt, baseDelay, error, config) {
6
+ switch (strategy) {
7
+ case 'fixed':
8
+ return baseDelay;
9
+ case 'exponential':
10
+ return baseDelay * Math.pow(2, attempt - 1);
11
+ case 'jitter': {
12
+ const exp = baseDelay * Math.pow(2, attempt - 1);
13
+ return Math.floor(exp * (0.5 + Math.random()));
14
+ }
15
+ case 'fibonacci': {
16
+ let a = 1, b = 1;
17
+ for (let i = 0; i < attempt - 1; i++) {
18
+ const next = a + b;
19
+ a = b;
20
+ b = next;
21
+ }
22
+ return baseDelay * b;
23
+ }
24
+ case 'custom':
25
+ if (config.customBackoff) {
26
+ return config.customBackoff(attempt, error);
27
+ }
28
+ return baseDelay;
29
+ default:
30
+ return baseDelay;
31
+ }
32
+ }
33
+ /** Execute a function with retry logic */
34
+ export function executeWithRetry(fn, config) {
35
+ const maxAttempts = config.maxAttempts ?? 3;
36
+ const baseDelay = config.delay ?? 1000;
37
+ const strategy = config.strategy ?? 'exponential';
38
+ const attempt = (n) => {
39
+ return fn().catch((err) => {
40
+ const error = err instanceof Error ? err : new Error(String(err));
41
+ if (n >= maxAttempts)
42
+ throw error;
43
+ if (config.retryIf && !config.retryIf(error, n))
44
+ throw error;
45
+ const delay = calculateBackoff(strategy, n, baseDelay, error, config);
46
+ return new Promise((resolve) => {
47
+ setTimeout(() => {
48
+ resolve(attempt(n + 1));
49
+ }, delay);
50
+ });
51
+ });
52
+ };
53
+ return attempt(1);
54
+ }
55
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/client/bunqueue/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAC9B,QAAuB,EACvB,OAAe,EACf,SAAiB,EACjB,KAAY,EACZ,MAAmB;IAEnB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QAEnB,KAAK,aAAa;YAChB,OAAO,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAE9C,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,GAAG,CAAC,CAAC;YACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC,GAAG,CAAC,CAAC;gBACN,CAAC,GAAG,IAAI,CAAC;YACX,CAAC;YACD,OAAO,SAAS,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,SAAS,CAAC;QAEnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,gBAAgB,CAAI,EAAoB,EAAE,MAAmB;IAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAC;IAElD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAc,EAAE;QACxC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACjC,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,WAAW;gBAAE,MAAM,KAAK,CAAC;YAClC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBAAE,MAAM,KAAK,CAAC;YAE7D,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE;gBAChC,UAAU,CAAC,GAAG,EAAE;oBACd,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1B,CAAC,EAAE,KAAK,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Bunqueue — Event Triggers
3
+ * When a job completes/fails, automatically create another job.
4
+ */
5
+ import type { Queue } from '../queue/queue';
6
+ import type { Worker } from '../worker/worker';
7
+ import type { TriggerRule } from './types';
8
+ export declare class TriggerManager<T = unknown, R = unknown> {
9
+ private readonly rules;
10
+ private active;
11
+ private readonly queue;
12
+ private readonly worker;
13
+ constructor(queue: Queue<T>, worker: Worker<T, R>);
14
+ add(rule: TriggerRule<T>): void;
15
+ private ensureActive;
16
+ private fire;
17
+ }
18
+ //# sourceMappingURL=triggers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/triggers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAKjD,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAK/B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,IAAI;CAUb"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Bunqueue — Event Triggers
3
+ * When a job completes/fails, automatically create another job.
4
+ */
5
+ export class TriggerManager {
6
+ rules = [];
7
+ active = false;
8
+ queue;
9
+ worker;
10
+ constructor(queue, worker) {
11
+ this.queue = queue;
12
+ this.worker = worker;
13
+ }
14
+ add(rule) {
15
+ this.rules.push(rule);
16
+ this.ensureActive();
17
+ }
18
+ ensureActive() {
19
+ if (this.active)
20
+ return;
21
+ this.active = true;
22
+ this.worker.on('completed', (job, result) => {
23
+ this.fire('completed', job, result);
24
+ });
25
+ this.worker.on('failed', (job, error) => {
26
+ this.fire('failed', job, error);
27
+ });
28
+ }
29
+ fire(event, job, resultOrError) {
30
+ for (const rule of this.rules) {
31
+ if (rule.on !== job.name)
32
+ continue;
33
+ if ((rule.event ?? 'completed') !== event)
34
+ continue;
35
+ if (rule.condition && !rule.condition(resultOrError, job))
36
+ continue;
37
+ const data = rule.data(resultOrError, job);
38
+ void this.queue.add(rule.create, data, rule.opts);
39
+ }
40
+ }
41
+ }
42
+ //# sourceMappingURL=triggers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../../src/client/bunqueue/triggers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,OAAO,cAAc;IACR,KAAK,GAAqB,EAAE,CAAC;IACtC,MAAM,GAAG,KAAK,CAAC;IACN,KAAK,CAAW;IAChB,MAAM,CAAe;IAEtC,YAAY,KAAe,EAAE,MAAoB;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,IAAoB;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAW,EAAE,MAAS,EAAE,EAAE;YACrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAW,EAAE,KAAY,EAAE,EAAE;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,IAAI,CAAC,KAA6B,EAAE,GAAW,EAAE,aAAsB;QAC7E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI;gBAAE,SAAS;YACnC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,KAAK;gBAAE,SAAS;YACpD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC;gBAAE,SAAS;YAEpE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Bunqueue — Job TTL (Time To Live)
3
+ * Expire unprocessed jobs based on configurable TTL.
4
+ */
5
+ import type { JobTtlConfig } from './types';
6
+ export declare class TtlChecker {
7
+ private readonly config;
8
+ constructor(config: JobTtlConfig);
9
+ /** Get TTL for a specific job name */
10
+ getTtl(jobName: string): number;
11
+ /** Check if a job has expired */
12
+ isExpired(jobName: string, jobTimestamp: number): boolean;
13
+ /** Set default TTL */
14
+ setDefaultTtl(ttlMs: number): void;
15
+ /** Set TTL for a specific job name */
16
+ setNameTtl(jobName: string, ttlMs: number): void;
17
+ }
18
+ //# sourceMappingURL=ttl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ttl.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/ttl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,EAAE,YAAY;IAIhC,sCAAsC;IACtC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI/B,iCAAiC;IACjC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAMzD,sBAAsB;IACtB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,sCAAsC;IACtC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAIjD"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Bunqueue — Job TTL (Time To Live)
3
+ * Expire unprocessed jobs based on configurable TTL.
4
+ */
5
+ export class TtlChecker {
6
+ config;
7
+ constructor(config) {
8
+ this.config = config;
9
+ }
10
+ /** Get TTL for a specific job name */
11
+ getTtl(jobName) {
12
+ return this.config.perName?.[jobName] ?? this.config.defaultTtl ?? 0;
13
+ }
14
+ /** Check if a job has expired */
15
+ isExpired(jobName, jobTimestamp) {
16
+ const ttl = this.getTtl(jobName);
17
+ if (ttl <= 0)
18
+ return false;
19
+ return Date.now() - jobTimestamp > ttl;
20
+ }
21
+ /** Set default TTL */
22
+ setDefaultTtl(ttlMs) {
23
+ this.config.defaultTtl = ttlMs;
24
+ }
25
+ /** Set TTL for a specific job name */
26
+ setNameTtl(jobName, ttlMs) {
27
+ this.config.perName ??= {};
28
+ this.config.perName[jobName] = ttlMs;
29
+ }
30
+ }
31
+ //# sourceMappingURL=ttl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ttl.js","sourceRoot":"","sources":["../../../src/client/bunqueue/ttl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,UAAU;IACJ,MAAM,CAAe;IAEtC,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,sCAAsC;IACtC,MAAM,CAAC,OAAe;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,iCAAiC;IACjC,SAAS,CAAC,OAAe,EAAE,YAAoB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,GAAG,CAAC;IACzC,CAAC;IAED,sBAAsB;IACtB,aAAa,CAAC,KAAa;QACzB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,sCAAsC;IACtC,UAAU,CAAC,OAAe,EAAE,KAAa;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Bunqueue Simple Mode — Type definitions
3
+ */
4
+ import type { Job, JobOptions, Processor, ConnectionOptions, QueueOptions, WorkerOptions } from '../types';
5
+ /** Middleware function: receives job and next(), returns result */
6
+ export type BunqueueMiddleware<T = unknown, R = unknown> = (job: Job<T>, next: () => Promise<R>) => Promise<R>;
7
+ /** Retry strategy for advanced backoff */
8
+ export type RetryStrategy = 'fixed' | 'exponential' | 'jitter' | 'fibonacci' | 'custom';
9
+ /** Advanced retry configuration */
10
+ export interface RetryConfig {
11
+ /** Max attempts (default: 3) */
12
+ maxAttempts?: number;
13
+ /** Base delay in ms (default: 1000) */
14
+ delay?: number;
15
+ /** Strategy (default: exponential) */
16
+ strategy?: RetryStrategy;
17
+ /** Custom backoff function: attempt → delay in ms */
18
+ customBackoff?: (attempt: number, error: Error) => number;
19
+ /** Only retry if this returns true */
20
+ retryIf?: (error: Error, attempt: number) => boolean;
21
+ }
22
+ /** Circuit breaker configuration */
23
+ export interface CircuitBreakerConfig {
24
+ /** Max consecutive failures before opening (default: 5) */
25
+ threshold?: number;
26
+ /** Time in ms before half-open retry (default: 30000) */
27
+ resetTimeout?: number;
28
+ /** Callback when circuit opens */
29
+ onOpen?: (failures: number) => void;
30
+ /** Callback when circuit closes */
31
+ onClose?: () => void;
32
+ /** Callback on half-open probe */
33
+ onHalfOpen?: () => void;
34
+ }
35
+ /** Circuit breaker state */
36
+ export type CircuitState = 'closed' | 'open' | 'half-open';
37
+ /** Event trigger rule */
38
+ export interface TriggerRule<T = unknown> {
39
+ /** Job name that triggers this rule */
40
+ on: string;
41
+ /** Event type (default: completed) */
42
+ event?: 'completed' | 'failed';
43
+ /** Job name to create */
44
+ create: string;
45
+ /** Data builder from the triggering job */
46
+ data: (result: unknown, job: Job<T>) => T;
47
+ /** Optional job options */
48
+ opts?: JobOptions;
49
+ /** Optional condition */
50
+ condition?: (result: unknown, job: Job<T>) => boolean;
51
+ }
52
+ /** Priority aging configuration */
53
+ export interface PriorityAgingConfig {
54
+ /** Check interval in ms (default: 60000) */
55
+ interval?: number;
56
+ /** Min age in ms before boost (default: 60000) */
57
+ minAge?: number;
58
+ /** Priority boost per interval (default: 1) */
59
+ boost?: number;
60
+ /** Max priority cap (default: 100) */
61
+ maxPriority?: number;
62
+ /** Max jobs to scan per tick (default: 100) */
63
+ maxScan?: number;
64
+ }
65
+ /** Batch processor function */
66
+ export type BatchProcessor<T = unknown, R = unknown> = (jobs: Array<Job<T>>) => Promise<R[]>;
67
+ /** Batch processing configuration */
68
+ export interface BatchConfig<T = unknown, R = unknown> {
69
+ /** Batch size (default: 10) */
70
+ size: number;
71
+ /** Max wait in ms before flushing partial batch (default: 5000) */
72
+ timeout?: number;
73
+ /** Batch processor function */
74
+ processor: BatchProcessor<T, R>;
75
+ }
76
+ /** Job TTL configuration */
77
+ export interface JobTtlConfig {
78
+ /** Default TTL in ms (0 = no TTL) */
79
+ defaultTtl?: number;
80
+ /** Per-job-name TTL overrides */
81
+ perName?: Record<string, number>;
82
+ }
83
+ /** Bunqueue options */
84
+ export interface BunqueueOptions<T = unknown, R = unknown> {
85
+ processor?: Processor<T, R>;
86
+ routes?: Record<string, Processor<T, R>>;
87
+ batch?: BatchConfig<T, R>;
88
+ concurrency?: number;
89
+ connection?: ConnectionOptions;
90
+ embedded?: boolean;
91
+ dataPath?: string;
92
+ defaultJobOptions?: JobOptions;
93
+ autorun?: boolean;
94
+ heartbeatInterval?: number;
95
+ batchSize?: number;
96
+ pollTimeout?: number;
97
+ autoBatch?: QueueOptions['autoBatch'];
98
+ limiter?: WorkerOptions['limiter'];
99
+ removeOnComplete?: WorkerOptions['removeOnComplete'];
100
+ removeOnFail?: WorkerOptions['removeOnFail'];
101
+ retry?: RetryConfig;
102
+ circuitBreaker?: CircuitBreakerConfig;
103
+ ttl?: JobTtlConfig;
104
+ priorityAging?: PriorityAgingConfig;
105
+ }
106
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/bunqueue/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,GAAG,EACH,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,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,0CAA0C;AAC1C,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExF,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,qDAAqD;IACrD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAC1D,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CACtD;AAED,oCAAoC;AACpC,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,yBAAyB;AACzB,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,2BAA2B;IAC3B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yBAAyB;IACzB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;CACvD;AAED,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,+BAA+B;AAC/B,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAE7F,qCAAqC;AACrC,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACnD,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjC;AAED,4BAA4B;AAC5B,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,uBAAuB;AACvB,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACvD,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Bunqueue Simple Mode — Type definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/bunqueue/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Bunqueue - Simplified all-in-one Queue + Worker
3
+ * Routes, middleware, cron, batch, retry, circuit breaker, TTL, aging, cancellation.
4
+ */
5
+ import { Queue } from './queue/queue';
6
+ import { Worker } from './worker/worker';
7
+ import type { Job, JobOptions } from './types';
8
+ import type { SchedulerInfo } from './queue/scheduler';
9
+ import type { BunqueueOptions, BunqueueMiddleware, TriggerRule, CircuitState } from './bunqueue/types';
10
+ export type { BunqueueMiddleware, BunqueueOptions, RetryStrategy, RetryConfig, CircuitBreakerConfig, TriggerRule, PriorityAgingConfig, BatchProcessor, BatchConfig, JobTtlConfig, } from './bunqueue/types';
11
+ export declare class Bunqueue<T = unknown, R = unknown> {
12
+ readonly name: string;
13
+ readonly queue: Queue<T>;
14
+ readonly worker: Worker<T, R>;
15
+ private readonly middlewares;
16
+ private readonly baseProcessor;
17
+ private readonly cb;
18
+ private readonly retryConfig;
19
+ private readonly triggerMgr;
20
+ private readonly ager;
21
+ private readonly cancellation;
22
+ private readonly ttlChecker;
23
+ private readonly batchAcc;
24
+ constructor(name: string, opts: BunqueueOptions<T, R>);
25
+ private buildRouteProcessor;
26
+ private buildQueueOpts;
27
+ private buildWorkerOpts;
28
+ private processJob;
29
+ private runMiddlewareChain;
30
+ use(middleware: BunqueueMiddleware<T, R>): this;
31
+ add(name: string, data: T, opts?: JobOptions): Promise<Job<T>>;
32
+ addBulk(jobs: Array<{
33
+ name: string;
34
+ data: T;
35
+ opts?: JobOptions;
36
+ }>): Promise<Job<T>[]>;
37
+ getJob(id: string): Promise<Job<T> | null>;
38
+ getJobCounts(): import("./queue/operations").JobCounts;
39
+ getJobCountsAsync(): Promise<import("./queue/operations").JobCounts>;
40
+ count(): number;
41
+ countAsync(): Promise<number>;
42
+ cron(id: string, pattern: string, data?: T, opts?: {
43
+ timezone?: string;
44
+ jobOpts?: JobOptions;
45
+ }): Promise<SchedulerInfo | null>;
46
+ every(id: string, intervalMs: number, data?: T, opts?: {
47
+ jobOpts?: JobOptions;
48
+ }): Promise<SchedulerInfo | null>;
49
+ removeCron(id: string): Promise<boolean>;
50
+ listCrons(): Promise<SchedulerInfo[]>;
51
+ cancel(jobId: string, gracePeriodMs?: number): void;
52
+ isCancelled(jobId: string): boolean;
53
+ getSignal(jobId: string): AbortSignal | null;
54
+ getCircuitState(): CircuitState;
55
+ resetCircuit(): void;
56
+ trigger(rule: TriggerRule<T>): this;
57
+ setDefaultTtl(ttlMs: number): void;
58
+ setNameTtl(name: string, ttlMs: number): void;
59
+ on(event: 'ready' | 'drained' | 'closed', listener: () => void): this;
60
+ on(event: 'active', listener: (job: Job<T>) => void): this;
61
+ on(event: 'completed', listener: (job: Job<T>, result: R) => void): this;
62
+ on(event: 'failed', listener: (job: Job<T>, error: Error) => void): this;
63
+ on(event: 'progress', listener: (job: Job<T> | null, progress: number) => void): this;
64
+ on(event: 'stalled', listener: (jobId: string, reason: string) => void): this;
65
+ on(event: 'error', listener: (error: Error) => void): this;
66
+ once(event: 'ready' | 'drained' | 'closed', listener: () => void): this;
67
+ once(event: 'active', listener: (job: Job<T>) => void): this;
68
+ once(event: 'completed', listener: (job: Job<T>, result: R) => void): this;
69
+ once(event: 'failed', listener: (job: Job<T>, error: Error) => void): this;
70
+ off(event: any, listener: (...args: any[]) => void): this;
71
+ pause(): void;
72
+ resume(): void;
73
+ close(force?: boolean): Promise<void>;
74
+ isRunning(): boolean;
75
+ isPaused(): boolean;
76
+ isClosed(): boolean;
77
+ }
78
+ //# sourceMappingURL=bunqueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bunqueue.d.ts","sourceRoot":"","sources":["../../src/client/bunqueue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Bunqueue - Simplified all-in-one Queue + Worker
3
+ * Routes, middleware, cron, batch, retry, circuit breaker, TTL, aging, cancellation.
4
+ */
5
+ import { Queue } from './queue/queue';
6
+ import { Worker } from './worker/worker';
7
+ import { executeWithRetry } from './bunqueue/retry';
8
+ import { WorkerCircuitBreaker } from './bunqueue/circuitBreaker';
9
+ import { BatchAccumulator } from './bunqueue/batch';
10
+ import { TriggerManager } from './bunqueue/triggers';
11
+ import { PriorityAger } from './bunqueue/aging';
12
+ import { CancellationManager } from './bunqueue/cancellation';
13
+ import { TtlChecker } from './bunqueue/ttl';
14
+ export class Bunqueue {
15
+ name;
16
+ queue;
17
+ worker;
18
+ middlewares = [];
19
+ baseProcessor;
20
+ cb;
21
+ retryConfig;
22
+ triggerMgr;
23
+ ager;
24
+ cancellation = new CancellationManager();
25
+ ttlChecker;
26
+ batchAcc;
27
+ constructor(name, opts) {
28
+ const modes = [opts.processor, opts.routes, opts.batch].filter(Boolean).length;
29
+ if (modes === 0)
30
+ throw new Error('Bunqueue requires "processor", "routes", or "batch"');
31
+ if (modes > 1)
32
+ throw new Error('Bunqueue: use only one of "processor", "routes", or "batch"');
33
+ this.name = name;
34
+ this.retryConfig = opts.retry ?? null;
35
+ this.ttlChecker = opts.ttl ? new TtlChecker(opts.ttl) : null;
36
+ // Build base processor
37
+ if (opts.batch) {
38
+ this.batchAcc = new BatchAccumulator(opts.batch);
39
+ this.baseProcessor = this.batchAcc.buildProcessor();
40
+ }
41
+ else {
42
+ this.batchAcc = null;
43
+ this.baseProcessor = opts.routes ? this.buildRouteProcessor(opts.routes) : opts.processor; // eslint-disable-line @typescript-eslint/no-non-null-assertion
44
+ }
45
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
46
+ const self = this;
47
+ const wrappedProcessor = ((job) => self.processJob(job));
48
+ this.queue = new Queue(name, this.buildQueueOpts(opts));
49
+ this.worker = new Worker(name, wrappedProcessor, this.buildWorkerOpts(opts));
50
+ // Initialize subsystems
51
+ this.cb = opts.circuitBreaker
52
+ ? new WorkerCircuitBreaker(opts.circuitBreaker, this.worker)
53
+ : null;
54
+ this.triggerMgr = new TriggerManager(this.queue, this.worker);
55
+ this.ager = opts.priorityAging ? new PriorityAger(opts.priorityAging, this.queue) : null;
56
+ this.ager?.start();
57
+ }
58
+ buildRouteProcessor(routes) {
59
+ const routeMap = routes;
60
+ return ((job) => {
61
+ const handler = routeMap[job.name];
62
+ if (!handler)
63
+ throw new Error(`No route for job "${job.name}" in queue "${this.name}"`);
64
+ return handler(job);
65
+ });
66
+ }
67
+ buildQueueOpts(opts) {
68
+ return {
69
+ connection: opts.connection,
70
+ embedded: opts.embedded,
71
+ dataPath: opts.dataPath,
72
+ defaultJobOptions: opts.defaultJobOptions,
73
+ autoBatch: opts.autoBatch,
74
+ };
75
+ }
76
+ buildWorkerOpts(opts) {
77
+ return {
78
+ connection: opts.connection,
79
+ embedded: opts.embedded,
80
+ dataPath: opts.dataPath,
81
+ concurrency: opts.concurrency,
82
+ autorun: opts.autorun,
83
+ heartbeatInterval: opts.heartbeatInterval,
84
+ batchSize: opts.batchSize,
85
+ pollTimeout: opts.pollTimeout,
86
+ limiter: opts.limiter,
87
+ removeOnComplete: opts.removeOnComplete,
88
+ removeOnFail: opts.removeOnFail,
89
+ };
90
+ }
91
+ // ============ Core Processing Pipeline ============
92
+ processJob(job) {
93
+ // Circuit breaker check
94
+ if (this.cb?.isOpen()) {
95
+ return Promise.reject(new Error('Circuit breaker is open'));
96
+ }
97
+ // TTL check
98
+ if (this.ttlChecker?.isExpired(job.name, job.timestamp)) {
99
+ return Promise.reject(new Error(`Job expired (age: ${Date.now() - job.timestamp}ms)`));
100
+ }
101
+ // Register cancellation
102
+ const ac = this.cancellation.register(job.id);
103
+ const runChain = () => this.runMiddlewareChain(job, ac);
104
+ const execute = this.retryConfig ? executeWithRetry(runChain, this.retryConfig) : runChain();
105
+ return execute.then((result) => {
106
+ this.cb?.onSuccess();
107
+ this.cancellation.unregister(job.id);
108
+ return result;
109
+ }, (err) => {
110
+ this.cb?.onFailure();
111
+ this.cancellation.unregister(job.id);
112
+ throw err;
113
+ });
114
+ }
115
+ runMiddlewareChain(job, ac) {
116
+ const asJob = job;
117
+ if (this.middlewares.length === 0) {
118
+ const result = this.baseProcessor(job);
119
+ return result instanceof Promise ? result : Promise.resolve(result);
120
+ }
121
+ let index = 0;
122
+ const mws = this.middlewares;
123
+ const base = this.baseProcessor;
124
+ const next = () => {
125
+ if (ac.signal.aborted)
126
+ return Promise.reject(new Error('Job cancelled'));
127
+ if (index < mws.length)
128
+ return mws[index++](asJob, next);
129
+ const result = base(job);
130
+ return result instanceof Promise ? result : Promise.resolve(result);
131
+ };
132
+ return next();
133
+ }
134
+ // ============ Middleware ============
135
+ use(middleware) {
136
+ this.middlewares.push(middleware);
137
+ return this;
138
+ }
139
+ // ============ Queue Operations ============
140
+ add(name, data, opts) {
141
+ return this.queue.add(name, data, opts);
142
+ }
143
+ addBulk(jobs) {
144
+ return this.queue.addBulk(jobs);
145
+ }
146
+ getJob(id) {
147
+ return this.queue.getJob(id);
148
+ }
149
+ getJobCounts() {
150
+ return this.queue.getJobCounts();
151
+ }
152
+ getJobCountsAsync() {
153
+ return this.queue.getJobCountsAsync();
154
+ }
155
+ count() {
156
+ return this.queue.count();
157
+ }
158
+ countAsync() {
159
+ return this.queue.countAsync();
160
+ }
161
+ // ============ Cron ============
162
+ cron(id, pattern, data, opts) {
163
+ return this.queue.upsertJobScheduler(id, { pattern, timezone: opts?.timezone }, { name: id, data, opts: opts?.jobOpts });
164
+ }
165
+ every(id, intervalMs, data, opts) {
166
+ return this.queue.upsertJobScheduler(id, { every: intervalMs }, { name: id, data, opts: opts?.jobOpts });
167
+ }
168
+ removeCron(id) {
169
+ return this.queue.removeJobScheduler(id);
170
+ }
171
+ listCrons() {
172
+ return this.queue.getJobSchedulers();
173
+ }
174
+ // ============ Cancellation (feature 3) ============
175
+ cancel(jobId, gracePeriodMs = 0) {
176
+ this.cancellation.cancel(jobId, gracePeriodMs);
177
+ }
178
+ isCancelled(jobId) {
179
+ return this.cancellation.isCancelled(jobId);
180
+ }
181
+ getSignal(jobId) {
182
+ return this.cancellation.getSignal(jobId);
183
+ }
184
+ // ============ Circuit Breaker (feature 5) ============
185
+ getCircuitState() {
186
+ return this.cb?.currentState ?? 'closed';
187
+ }
188
+ resetCircuit() {
189
+ this.cb?.reset();
190
+ }
191
+ // ============ Triggers (feature 6) ============
192
+ trigger(rule) {
193
+ this.triggerMgr.add(rule);
194
+ return this;
195
+ }
196
+ // ============ TTL (feature 7) ============
197
+ setDefaultTtl(ttlMs) {
198
+ this.ttlChecker?.setDefaultTtl(ttlMs);
199
+ }
200
+ setNameTtl(name, ttlMs) {
201
+ this.ttlChecker?.setNameTtl(name, ttlMs);
202
+ }
203
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
204
+ on(event, listener) {
205
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
206
+ this.worker.on(event, listener);
207
+ return this;
208
+ }
209
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
210
+ once(event, listener) {
211
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
212
+ this.worker.once(event, listener);
213
+ return this;
214
+ }
215
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
+ off(event, listener) {
217
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
218
+ this.worker.off(event, listener);
219
+ return this;
220
+ }
221
+ // ============ Control ============
222
+ pause() {
223
+ this.queue.pause();
224
+ this.worker.pause();
225
+ }
226
+ resume() {
227
+ this.queue.resume();
228
+ this.worker.resume();
229
+ }
230
+ async close(force = false) {
231
+ this.ager?.destroy();
232
+ this.cb?.destroy();
233
+ this.batchAcc?.destroy();
234
+ this.cancellation.destroyAll();
235
+ await this.worker.close(force);
236
+ this.queue.close();
237
+ }
238
+ isRunning() {
239
+ return this.worker.isRunning();
240
+ }
241
+ isPaused() {
242
+ return this.worker.isPaused();
243
+ }
244
+ isClosed() {
245
+ return this.worker.isClosed();
246
+ }
247
+ }
248
+ //# 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, RetryStrategy, RetryConfig, CircuitBreakerConfig, TriggerRule, PriorityAgingConfig, BatchProcessor, BatchConfig, JobTtlConfig, } 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,EACV,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,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;AAatC,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.91",
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",