bunqueue 2.6.90 → 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 (40) hide show
  1. package/dist/client/bunqueue/aging.d.ts +16 -0
  2. package/dist/client/bunqueue/aging.d.ts.map +1 -0
  3. package/dist/client/bunqueue/aging.js +53 -0
  4. package/dist/client/bunqueue/aging.js.map +1 -0
  5. package/dist/client/bunqueue/batch.d.ts +17 -0
  6. package/dist/client/bunqueue/batch.d.ts.map +1 -0
  7. package/dist/client/bunqueue/batch.js +60 -0
  8. package/dist/client/bunqueue/batch.js.map +1 -0
  9. package/dist/client/bunqueue/cancellation.d.ts +20 -0
  10. package/dist/client/bunqueue/cancellation.d.ts.map +1 -0
  11. package/dist/client/bunqueue/cancellation.js +48 -0
  12. package/dist/client/bunqueue/cancellation.js.map +1 -0
  13. package/dist/client/bunqueue/circuitBreaker.d.ts +21 -0
  14. package/dist/client/bunqueue/circuitBreaker.d.ts.map +1 -0
  15. package/dist/client/bunqueue/circuitBreaker.js +68 -0
  16. package/dist/client/bunqueue/circuitBreaker.js.map +1 -0
  17. package/dist/client/bunqueue/retry.d.ts +9 -0
  18. package/dist/client/bunqueue/retry.d.ts.map +1 -0
  19. package/dist/client/bunqueue/retry.js +55 -0
  20. package/dist/client/bunqueue/retry.js.map +1 -0
  21. package/dist/client/bunqueue/triggers.d.ts +18 -0
  22. package/dist/client/bunqueue/triggers.d.ts.map +1 -0
  23. package/dist/client/bunqueue/triggers.js +42 -0
  24. package/dist/client/bunqueue/triggers.js.map +1 -0
  25. package/dist/client/bunqueue/ttl.d.ts +18 -0
  26. package/dist/client/bunqueue/ttl.d.ts.map +1 -0
  27. package/dist/client/bunqueue/ttl.js +31 -0
  28. package/dist/client/bunqueue/ttl.js.map +1 -0
  29. package/dist/client/bunqueue/types.d.ts +106 -0
  30. package/dist/client/bunqueue/types.d.ts.map +1 -0
  31. package/dist/client/bunqueue/types.js +5 -0
  32. package/dist/client/bunqueue/types.js.map +1 -0
  33. package/dist/client/bunqueue.d.ts +27 -77
  34. package/dist/client/bunqueue.d.ts.map +1 -1
  35. package/dist/client/bunqueue.js +130 -97
  36. package/dist/client/bunqueue.js.map +1 -1
  37. package/dist/client/index.d.ts +1 -1
  38. package/dist/client/index.d.ts.map +1 -1
  39. package/dist/client/index.js.map +1 -1
  40. package/package.json +1 -1
@@ -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":"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"}
@@ -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"}
@@ -1,87 +1,33 @@
1
1
  /**
2
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
- * ```
3
+ * Routes, middleware, cron, batch, retry, circuit breaker, TTL, aging, cancellation.
36
4
  */
37
5
  import { Queue } from './queue/queue';
38
6
  import { Worker } from './worker/worker';
39
- import type { Job, JobOptions, QueueOptions, WorkerOptions, Processor, ConnectionOptions } from './types';
7
+ import type { Job, JobOptions } from './types';
40
8
  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
- }
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';
75
11
  export declare class Bunqueue<T = unknown, R = unknown> {
76
12
  readonly name: string;
77
13
  readonly queue: Queue<T>;
78
14
  readonly worker: Worker<T, R>;
79
15
  private readonly middlewares;
80
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;
81
24
  constructor(name: string, opts: BunqueueOptions<T, R>);
82
- /** Add middleware to the processing pipeline */
25
+ private buildRouteProcessor;
26
+ private buildQueueOpts;
27
+ private buildWorkerOpts;
28
+ private processJob;
29
+ private runMiddlewareChain;
83
30
  use(middleware: BunqueueMiddleware<T, R>): this;
84
- private executeWithMiddleware;
85
31
  add(name: string, data: T, opts?: JobOptions): Promise<Job<T>>;
86
32
  addBulk(jobs: Array<{
87
33
  name: string;
@@ -93,19 +39,23 @@ export declare class Bunqueue<T = unknown, R = unknown> {
93
39
  getJobCountsAsync(): Promise<import("./queue/operations").JobCounts>;
94
40
  count(): number;
95
41
  countAsync(): Promise<number>;
96
- /** Add a cron job */
97
- cron(schedulerId: string, pattern: string, data?: T, opts?: {
42
+ cron(id: string, pattern: string, data?: T, opts?: {
98
43
  timezone?: string;
99
44
  jobOpts?: JobOptions;
100
45
  }): Promise<SchedulerInfo | null>;
101
- /** Add a repeating job (every N ms) */
102
- every(schedulerId: string, intervalMs: number, data?: T, opts?: {
46
+ every(id: string, intervalMs: number, data?: T, opts?: {
103
47
  jobOpts?: JobOptions;
104
48
  }): Promise<SchedulerInfo | null>;
105
- /** Remove a cron/repeating job */
106
- removeCron(schedulerId: string): Promise<boolean>;
107
- /** List all cron/repeating jobs */
49
+ removeCron(id: string): Promise<boolean>;
108
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;
109
59
  on(event: 'ready' | 'drained' | 'closed', listener: () => void): this;
110
60
  on(event: 'active', listener: (job: Job<T>) => void): this;
111
61
  on(event: 'completed', listener: (job: Job<T>, result: R) => void): this;
@@ -1 +1 @@
1
- {"version":3,"file":"bunqueue.d.ts","sourceRoot":"","sources":["../../src/client/bunqueue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bunqueue.d.ts","sourceRoot":"","sources":["../../src/client/bunqueue.ts"],"names":[],"mappings":"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"}
@@ -1,85 +1,80 @@
1
1
  /**
2
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
- * ```
3
+ * Routes, middleware, cron, batch, retry, circuit breaker, TTL, aging, cancellation.
36
4
  */
37
5
  import { Queue } from './queue/queue';
38
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';
39
14
  export class Bunqueue {
40
15
  name;
41
16
  queue;
42
17
  worker;
43
18
  middlewares = [];
44
19
  baseProcessor;
20
+ cb;
21
+ retryConfig;
22
+ triggerMgr;
23
+ ager;
24
+ cancellation = new CancellationManager();
25
+ ttlChecker;
26
+ batchAcc;
45
27
  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
- }
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"');
52
33
  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;
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();
66
40
  }
67
41
  else {
68
- // Should never reach here due to validation above
69
- throw new Error('Bunqueue requires either "processor" or "routes"');
42
+ this.batchAcc = null;
43
+ this.baseProcessor = opts.routes ? this.buildRouteProcessor(opts.routes) : opts.processor; // eslint-disable-line @typescript-eslint/no-non-null-assertion
70
44
  }
71
- // Wrapped processor that applies middleware chain
72
45
  // eslint-disable-next-line @typescript-eslint/no-this-alias
73
46
  const self = this;
74
- const wrappedProcessor = ((job) => self.executeWithMiddleware(job));
75
- const queueOpts = {
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 {
76
69
  connection: opts.connection,
77
70
  embedded: opts.embedded,
78
71
  dataPath: opts.dataPath,
79
72
  defaultJobOptions: opts.defaultJobOptions,
80
73
  autoBatch: opts.autoBatch,
81
74
  };
82
- const workerOpts = {
75
+ }
76
+ buildWorkerOpts(opts) {
77
+ return {
83
78
  connection: opts.connection,
84
79
  embedded: opts.embedded,
85
80
  dataPath: opts.dataPath,
@@ -92,34 +87,55 @@ export class Bunqueue {
92
87
  removeOnComplete: opts.removeOnComplete,
93
88
  removeOnFail: opts.removeOnFail,
94
89
  };
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
90
  }
104
- executeWithMiddleware(job) {
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) {
105
116
  const asJob = job;
106
117
  if (this.middlewares.length === 0) {
107
118
  const result = this.baseProcessor(job);
108
119
  return result instanceof Promise ? result : Promise.resolve(result);
109
120
  }
110
121
  let index = 0;
111
- const middlewares = this.middlewares;
112
- const baseProcessor = this.baseProcessor;
122
+ const mws = this.middlewares;
123
+ const base = this.baseProcessor;
113
124
  const next = () => {
114
- if (index < middlewares.length) {
115
- const mw = middlewares[index++];
116
- return mw(asJob, next);
117
- }
118
- const result = baseProcessor(job);
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);
119
130
  return result instanceof Promise ? result : Promise.resolve(result);
120
131
  };
121
132
  return next();
122
133
  }
134
+ // ============ Middleware ============
135
+ use(middleware) {
136
+ this.middlewares.push(middleware);
137
+ return this;
138
+ }
123
139
  // ============ Queue Operations ============
124
140
  add(name, data, opts) {
125
141
  return this.queue.add(name, data, opts);
@@ -143,34 +159,47 @@ export class Bunqueue {
143
159
  return this.queue.countAsync();
144
160
  }
145
161
  // ============ 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);
162
+ cron(id, pattern, data, opts) {
163
+ return this.queue.upsertJobScheduler(id, { pattern, timezone: opts?.timezone }, { name: id, data, opts: opts?.jobOpts });
165
164
  }
166
- /** Remove a cron/repeating job */
167
- removeCron(schedulerId) {
168
- return this.queue.removeJobScheduler(schedulerId);
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);
169
170
  }
170
- /** List all cron/repeating jobs */
171
171
  listCrons() {
172
172
  return this.queue.getJobSchedulers();
173
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
+ }
174
203
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
175
204
  on(event, listener) {
176
205
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
@@ -199,6 +228,10 @@ export class Bunqueue {
199
228
  this.worker.resume();
200
229
  }
201
230
  async close(force = false) {
231
+ this.ager?.destroy();
232
+ this.cb?.destroy();
233
+ this.batchAcc?.destroy();
234
+ this.cancellation.destroyAll();
202
235
  await this.worker.close(force);
203
236
  this.queue.close();
204
237
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bunqueue.js","sourceRoot":"","sources":["../../src/client/bunqueue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bunqueue.js","sourceRoot":"","sources":["../../src/client/bunqueue.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@
21
21
  export { Queue } from './queue';
22
22
  export { Worker } from './worker';
23
23
  export { Bunqueue } from './bunqueue';
24
- export type { BunqueueOptions, BunqueueMiddleware } from './bunqueue';
24
+ export type { BunqueueOptions, BunqueueMiddleware, RetryStrategy, RetryConfig, CircuitBreakerConfig, TriggerRule, PriorityAgingConfig, BatchProcessor, BatchConfig, JobTtlConfig, } from './bunqueue';
25
25
  export { SandboxedWorker } from './sandboxedWorker';
26
26
  export { QueueEvents } from './events';
27
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,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"}
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"}
@@ -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,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"}
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.90",
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",