bunqueue 2.6.90 → 2.6.92

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 (48) 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/dedupDebounce.d.ts +13 -0
  18. package/dist/client/bunqueue/dedupDebounce.d.ts.map +1 -0
  19. package/dist/client/bunqueue/dedupDebounce.js +36 -0
  20. package/dist/client/bunqueue/dedupDebounce.js.map +1 -0
  21. package/dist/client/bunqueue/dlqRateLimit.d.ts +19 -0
  22. package/dist/client/bunqueue/dlqRateLimit.d.ts.map +1 -0
  23. package/dist/client/bunqueue/dlqRateLimit.js +37 -0
  24. package/dist/client/bunqueue/dlqRateLimit.js.map +1 -0
  25. package/dist/client/bunqueue/retry.d.ts +9 -0
  26. package/dist/client/bunqueue/retry.d.ts.map +1 -0
  27. package/dist/client/bunqueue/retry.js +55 -0
  28. package/dist/client/bunqueue/retry.js.map +1 -0
  29. package/dist/client/bunqueue/triggers.d.ts +18 -0
  30. package/dist/client/bunqueue/triggers.d.ts.map +1 -0
  31. package/dist/client/bunqueue/triggers.js +42 -0
  32. package/dist/client/bunqueue/triggers.js.map +1 -0
  33. package/dist/client/bunqueue/ttl.d.ts +18 -0
  34. package/dist/client/bunqueue/ttl.d.ts.map +1 -0
  35. package/dist/client/bunqueue/ttl.js +31 -0
  36. package/dist/client/bunqueue/ttl.js.map +1 -0
  37. package/dist/client/bunqueue/types.d.ts +141 -0
  38. package/dist/client/bunqueue/types.d.ts.map +1 -0
  39. package/dist/client/bunqueue/types.js +5 -0
  40. package/dist/client/bunqueue/types.js.map +1 -0
  41. package/dist/client/bunqueue.d.ts +37 -78
  42. package/dist/client/bunqueue.d.ts.map +1 -1
  43. package/dist/client/bunqueue.js +168 -105
  44. package/dist/client/bunqueue.js.map +1 -1
  45. package/dist/client/index.d.ts +1 -1
  46. package/dist/client/index.d.ts.map +1 -1
  47. package/dist/client/index.js.map +1 -1
  48. package/package.json +1 -1
@@ -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,141 @@
1
+ /**
2
+ * Bunqueue Simple Mode — Type definitions
3
+ */
4
+ import type { Job, JobOptions, Processor, ConnectionOptions, QueueOptions, WorkerOptions, RateLimiterOptions } 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
+ /** Deduplication configuration for Simple Mode */
84
+ export interface BunqueueDeduplicationConfig {
85
+ /** Default deduplication TTL in ms (default: 3600000 = 1 hour) */
86
+ ttl?: number;
87
+ /** Extend TTL when duplicate arrives (default: false) */
88
+ extend?: boolean;
89
+ /** Replace data when duplicate arrives in delayed state (default: false) */
90
+ replace?: boolean;
91
+ }
92
+ /** Debounce configuration for Simple Mode */
93
+ export interface BunqueueDebounceConfig {
94
+ /** Default debounce TTL in ms */
95
+ ttl: number;
96
+ }
97
+ /** DLQ configuration for Simple Mode */
98
+ export interface BunqueueDlqConfig {
99
+ /** Enable auto-retry from DLQ (default: false) */
100
+ autoRetry?: boolean;
101
+ /** Auto-retry interval in ms (default: 3600000 = 1 hour) */
102
+ autoRetryInterval?: number;
103
+ /** Max auto-retries (default: 3) */
104
+ maxAutoRetries?: number;
105
+ /** Max age before auto-purge in ms (default: 604800000 = 7 days) */
106
+ maxAge?: number | null;
107
+ /** Max entries per queue (default: 10000) */
108
+ maxEntries?: number;
109
+ }
110
+ /** Bunqueue options */
111
+ export interface BunqueueOptions<T = unknown, R = unknown> {
112
+ processor?: Processor<T, R>;
113
+ routes?: Record<string, Processor<T, R>>;
114
+ batch?: BatchConfig<T, R>;
115
+ concurrency?: number;
116
+ connection?: ConnectionOptions;
117
+ embedded?: boolean;
118
+ dataPath?: string;
119
+ defaultJobOptions?: JobOptions;
120
+ autorun?: boolean;
121
+ heartbeatInterval?: number;
122
+ batchSize?: number;
123
+ pollTimeout?: number;
124
+ autoBatch?: QueueOptions['autoBatch'];
125
+ limiter?: WorkerOptions['limiter'];
126
+ removeOnComplete?: WorkerOptions['removeOnComplete'];
127
+ removeOnFail?: WorkerOptions['removeOnFail'];
128
+ retry?: RetryConfig;
129
+ circuitBreaker?: CircuitBreakerConfig;
130
+ ttl?: JobTtlConfig;
131
+ priorityAging?: PriorityAgingConfig;
132
+ /** Job deduplication defaults — applied via defaultJobOptions */
133
+ deduplication?: BunqueueDeduplicationConfig;
134
+ /** Job debouncing defaults — applied via defaultJobOptions */
135
+ debounce?: BunqueueDebounceConfig;
136
+ /** Rate limiting for the worker */
137
+ rateLimit?: RateLimiterOptions;
138
+ /** Dead letter queue auto-management */
139
+ dlq?: BunqueueDlqConfig;
140
+ }
141
+ //# 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,35 @@
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, DlqConfig, DlqEntry, DlqStats, DlqFilter } 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, BunqueueDeduplicationConfig, BunqueueDebounceConfig, BunqueueDlqConfig, } 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;
24
+ private readonly merger;
25
+ private readonly dlqrl;
81
26
  constructor(name: string, opts: BunqueueOptions<T, R>);
82
- /** Add middleware to the processing pipeline */
27
+ private buildRouteProcessor;
28
+ private buildQueueOpts;
29
+ private buildWorkerOpts;
30
+ private processJob;
31
+ private runMiddlewareChain;
83
32
  use(middleware: BunqueueMiddleware<T, R>): this;
84
- private executeWithMiddleware;
85
33
  add(name: string, data: T, opts?: JobOptions): Promise<Job<T>>;
86
34
  addBulk(jobs: Array<{
87
35
  name: string;
@@ -93,19 +41,31 @@ export declare class Bunqueue<T = unknown, R = unknown> {
93
41
  getJobCountsAsync(): Promise<import("./queue/operations").JobCounts>;
94
42
  count(): number;
95
43
  countAsync(): Promise<number>;
96
- /** Add a cron job */
97
- cron(schedulerId: string, pattern: string, data?: T, opts?: {
44
+ cron(id: string, pattern: string, data?: T, opts?: {
98
45
  timezone?: string;
99
46
  jobOpts?: JobOptions;
100
47
  }): Promise<SchedulerInfo | null>;
101
- /** Add a repeating job (every N ms) */
102
- every(schedulerId: string, intervalMs: number, data?: T, opts?: {
48
+ every(id: string, intervalMs: number, data?: T, opts?: {
103
49
  jobOpts?: JobOptions;
104
50
  }): Promise<SchedulerInfo | null>;
105
- /** Remove a cron/repeating job */
106
- removeCron(schedulerId: string): Promise<boolean>;
107
- /** List all cron/repeating jobs */
51
+ removeCron(id: string): Promise<boolean>;
108
52
  listCrons(): Promise<SchedulerInfo[]>;
53
+ cancel(jobId: string, gracePeriodMs?: number): void;
54
+ isCancelled(jobId: string): boolean;
55
+ getSignal(jobId: string): AbortSignal | null;
56
+ getCircuitState(): CircuitState;
57
+ resetCircuit(): void;
58
+ trigger(rule: TriggerRule<T>): this;
59
+ setDefaultTtl(ttlMs: number): void;
60
+ setNameTtl(name: string, ttlMs: number): void;
61
+ setDlqConfig(config: Partial<DlqConfig>): void;
62
+ getDlqConfig(): DlqConfig;
63
+ getDlq(filter?: DlqFilter): DlqEntry<T>[];
64
+ getDlqStats(): DlqStats;
65
+ retryDlq(id?: string): number;
66
+ purgeDlq(): number;
67
+ setGlobalRateLimit(max: number, duration?: number): void;
68
+ removeGlobalRateLimit(): void;
109
69
  on(event: 'ready' | 'drained' | 'closed', listener: () => void): this;
110
70
  on(event: 'active', listener: (job: Job<T>) => void): this;
111
71
  on(event: 'completed', listener: (job: Job<T>, result: R) => void): this;
@@ -114,7 +74,6 @@ export declare class Bunqueue<T = unknown, R = unknown> {
114
74
  on(event: 'stalled', listener: (jobId: string, reason: string) => void): this;
115
75
  on(event: 'error', listener: (error: Error) => void): this;
116
76
  once(event: 'ready' | 'drained' | 'closed', listener: () => void): this;
117
- once(event: 'active', listener: (job: Job<T>) => void): this;
118
77
  once(event: 'completed', listener: (job: Job<T>, result: R) => void): this;
119
78
  once(event: 'failed', listener: (job: Job<T>, error: Error) => void): this;
120
79
  off(event: any, listener: (...args: any[]) => 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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"}