bunqueue 1.9.7 → 1.9.8

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 (145) hide show
  1. package/dist/application/backgroundTasks.d.ts +3 -6
  2. package/dist/application/backgroundTasks.d.ts.map +1 -1
  3. package/dist/application/backgroundTasks.js +9 -172
  4. package/dist/application/backgroundTasks.js.map +1 -1
  5. package/dist/application/cleanupTasks.d.ts +1 -1
  6. package/dist/application/cleanupTasks.d.ts.map +1 -1
  7. package/dist/application/cleanupTasks.js +57 -22
  8. package/dist/application/cleanupTasks.js.map +1 -1
  9. package/dist/application/clientTracking.d.ts +22 -0
  10. package/dist/application/clientTracking.d.ts.map +1 -0
  11. package/dist/application/clientTracking.js +122 -0
  12. package/dist/application/clientTracking.js.map +1 -0
  13. package/dist/application/contextFactory.d.ts +97 -0
  14. package/dist/application/contextFactory.d.ts.map +1 -0
  15. package/dist/application/contextFactory.js +169 -0
  16. package/dist/application/contextFactory.js.map +1 -0
  17. package/dist/application/dependencyProcessor.d.ts +11 -0
  18. package/dist/application/dependencyProcessor.d.ts.map +1 -0
  19. package/dist/application/dependencyProcessor.js +69 -0
  20. package/dist/application/dependencyProcessor.js.map +1 -0
  21. package/dist/application/dlqManager.d.ts +12 -0
  22. package/dist/application/dlqManager.d.ts.map +1 -1
  23. package/dist/application/dlqManager.js +36 -0
  24. package/dist/application/dlqManager.js.map +1 -1
  25. package/dist/application/lockManager.d.ts +2 -49
  26. package/dist/application/lockManager.d.ts.map +1 -1
  27. package/dist/application/lockManager.js +73 -262
  28. package/dist/application/lockManager.js.map +1 -1
  29. package/dist/application/lockOperations.d.ts +39 -0
  30. package/dist/application/lockOperations.d.ts.map +1 -0
  31. package/dist/application/lockOperations.js +101 -0
  32. package/dist/application/lockOperations.js.map +1 -0
  33. package/dist/application/operations/ack.d.ts +0 -5
  34. package/dist/application/operations/ack.d.ts.map +1 -1
  35. package/dist/application/operations/ack.js +30 -258
  36. package/dist/application/operations/ack.js.map +1 -1
  37. package/dist/application/operations/ackHelpers.d.ts +78 -0
  38. package/dist/application/operations/ackHelpers.d.ts.map +1 -0
  39. package/dist/application/operations/ackHelpers.js +162 -0
  40. package/dist/application/operations/ackHelpers.js.map +1 -0
  41. package/dist/application/operations/jobManagement.d.ts +2 -0
  42. package/dist/application/operations/jobManagement.d.ts.map +1 -1
  43. package/dist/application/operations/jobManagement.js +8 -0
  44. package/dist/application/operations/jobManagement.js.map +1 -1
  45. package/dist/application/operations/push.d.ts.map +1 -1
  46. package/dist/application/operations/push.js +8 -2
  47. package/dist/application/operations/push.js.map +1 -1
  48. package/dist/application/operations/queryOperations.d.ts +11 -0
  49. package/dist/application/operations/queryOperations.d.ts.map +1 -1
  50. package/dist/application/operations/queryOperations.js +32 -0
  51. package/dist/application/operations/queryOperations.js.map +1 -1
  52. package/dist/application/queueManager.d.ts +3 -11
  53. package/dist/application/queueManager.d.ts.map +1 -1
  54. package/dist/application/queueManager.js +90 -243
  55. package/dist/application/queueManager.js.map +1 -1
  56. package/dist/application/stallDetection.d.ts +11 -0
  57. package/dist/application/stallDetection.d.ts.map +1 -0
  58. package/dist/application/stallDetection.js +128 -0
  59. package/dist/application/stallDetection.js.map +1 -0
  60. package/dist/domain/queue/dependencyTracker.d.ts +74 -0
  61. package/dist/domain/queue/dependencyTracker.d.ts.map +1 -0
  62. package/dist/domain/queue/dependencyTracker.js +126 -0
  63. package/dist/domain/queue/dependencyTracker.js.map +1 -0
  64. package/dist/domain/queue/dlqShard.d.ts +59 -0
  65. package/dist/domain/queue/dlqShard.d.ts.map +1 -0
  66. package/dist/domain/queue/dlqShard.js +165 -0
  67. package/dist/domain/queue/dlqShard.js.map +1 -0
  68. package/dist/domain/queue/limiterManager.d.ts +44 -0
  69. package/dist/domain/queue/limiterManager.d.ts.map +1 -0
  70. package/dist/domain/queue/limiterManager.js +99 -0
  71. package/dist/domain/queue/limiterManager.js.map +1 -0
  72. package/dist/domain/queue/shard.d.ts +29 -122
  73. package/dist/domain/queue/shard.d.ts.map +1 -1
  74. package/dist/domain/queue/shard.js +152 -426
  75. package/dist/domain/queue/shard.js.map +1 -1
  76. package/dist/domain/queue/temporalManager.d.ts +81 -0
  77. package/dist/domain/queue/temporalManager.d.ts.map +1 -0
  78. package/dist/domain/queue/temporalManager.js +149 -0
  79. package/dist/domain/queue/temporalManager.js.map +1 -0
  80. package/dist/domain/queue/uniqueKeyManager.d.ts +32 -0
  81. package/dist/domain/queue/uniqueKeyManager.d.ts.map +1 -0
  82. package/dist/domain/queue/uniqueKeyManager.js +87 -0
  83. package/dist/domain/queue/uniqueKeyManager.js.map +1 -0
  84. package/dist/infrastructure/backup/s3Backup.d.ts +3 -40
  85. package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -1
  86. package/dist/infrastructure/backup/s3Backup.js +10 -182
  87. package/dist/infrastructure/backup/s3Backup.js.map +1 -1
  88. package/dist/infrastructure/backup/s3BackupConfig.d.ts +67 -0
  89. package/dist/infrastructure/backup/s3BackupConfig.d.ts.map +1 -0
  90. package/dist/infrastructure/backup/s3BackupConfig.js +48 -0
  91. package/dist/infrastructure/backup/s3BackupConfig.js.map +1 -0
  92. package/dist/infrastructure/backup/s3BackupOperations.d.ts +23 -0
  93. package/dist/infrastructure/backup/s3BackupOperations.d.ts.map +1 -0
  94. package/dist/infrastructure/backup/s3BackupOperations.js +170 -0
  95. package/dist/infrastructure/backup/s3BackupOperations.js.map +1 -0
  96. package/dist/infrastructure/persistence/sqlite.d.ts +4 -13
  97. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  98. package/dist/infrastructure/persistence/sqlite.js +23 -178
  99. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  100. package/dist/infrastructure/persistence/sqliteBatch.d.ts +38 -0
  101. package/dist/infrastructure/persistence/sqliteBatch.d.ts.map +1 -0
  102. package/dist/infrastructure/persistence/sqliteBatch.js +124 -0
  103. package/dist/infrastructure/persistence/sqliteBatch.js.map +1 -0
  104. package/dist/infrastructure/persistence/sqliteSerializer.d.ts +17 -0
  105. package/dist/infrastructure/persistence/sqliteSerializer.d.ts.map +1 -0
  106. package/dist/infrastructure/persistence/sqliteSerializer.js +81 -0
  107. package/dist/infrastructure/persistence/sqliteSerializer.js.map +1 -0
  108. package/dist/infrastructure/server/handler.d.ts.map +1 -1
  109. package/dist/infrastructure/server/handler.js +1 -186
  110. package/dist/infrastructure/server/handler.js.map +1 -1
  111. package/dist/infrastructure/server/handlerRoutes.d.ts +23 -0
  112. package/dist/infrastructure/server/handlerRoutes.d.ts.map +1 -0
  113. package/dist/infrastructure/server/handlerRoutes.js +190 -0
  114. package/dist/infrastructure/server/handlerRoutes.js.map +1 -0
  115. package/dist/infrastructure/server/http.d.ts +4 -25
  116. package/dist/infrastructure/server/http.d.ts.map +1 -1
  117. package/dist/infrastructure/server/http.js +43 -285
  118. package/dist/infrastructure/server/http.js.map +1 -1
  119. package/dist/infrastructure/server/httpEndpoints.d.ts +19 -0
  120. package/dist/infrastructure/server/httpEndpoints.d.ts.map +1 -0
  121. package/dist/infrastructure/server/httpEndpoints.js +151 -0
  122. package/dist/infrastructure/server/httpEndpoints.js.map +1 -0
  123. package/dist/infrastructure/server/sseHandler.d.ts +27 -0
  124. package/dist/infrastructure/server/sseHandler.d.ts.map +1 -0
  125. package/dist/infrastructure/server/sseHandler.js +77 -0
  126. package/dist/infrastructure/server/sseHandler.js.map +1 -0
  127. package/dist/infrastructure/server/wsHandler.d.ts +31 -0
  128. package/dist/infrastructure/server/wsHandler.d.ts.map +1 -0
  129. package/dist/infrastructure/server/wsHandler.js +63 -0
  130. package/dist/infrastructure/server/wsHandler.js.map +1 -0
  131. package/dist/mcp/index.js +3 -465
  132. package/dist/mcp/index.js.map +1 -1
  133. package/dist/mcp/mcpHandlers.d.ts +129 -0
  134. package/dist/mcp/mcpHandlers.d.ts.map +1 -0
  135. package/dist/mcp/mcpHandlers.js +204 -0
  136. package/dist/mcp/mcpHandlers.js.map +1 -0
  137. package/dist/mcp/mcpTools.d.ts +15 -0
  138. package/dist/mcp/mcpTools.d.ts.map +1 -0
  139. package/dist/mcp/mcpTools.js +277 -0
  140. package/dist/mcp/mcpTools.js.map +1 -0
  141. package/package.json +2 -2
  142. package/dist/cli/dashboard.d.ts +0 -32
  143. package/dist/cli/dashboard.d.ts.map +0 -1
  144. package/dist/cli/dashboard.js +0 -183
  145. package/dist/cli/dashboard.js.map +0 -1
@@ -0,0 +1,99 @@
1
+ /**
2
+ * LimiterManager - Rate limiting and concurrency control
3
+ */
4
+ import { createQueueState, RateLimiter, ConcurrencyLimiter } from '../types/queue';
5
+ /**
6
+ * Manages rate limiting and concurrency for queues
7
+ */
8
+ export class LimiterManager {
9
+ /** Queue state (pause, rate limit, concurrency) */
10
+ queueState = new Map();
11
+ /** Rate limiters per queue */
12
+ rateLimiters = new Map();
13
+ /** Concurrency limiters per queue */
14
+ concurrencyLimiters = new Map();
15
+ /** Get queue state */
16
+ getState(name) {
17
+ let state = this.queueState.get(name);
18
+ if (!state) {
19
+ state = createQueueState(name);
20
+ this.queueState.set(name, state);
21
+ }
22
+ return state;
23
+ }
24
+ /** Check if queue is paused */
25
+ isPaused(name) {
26
+ return this.queueState.get(name)?.paused ?? false;
27
+ }
28
+ /** Pause queue */
29
+ pause(name) {
30
+ this.getState(name).paused = true;
31
+ }
32
+ /** Resume queue */
33
+ resume(name) {
34
+ this.getState(name).paused = false;
35
+ }
36
+ // ============ Rate Limiting ============
37
+ /** Set rate limit for queue */
38
+ setRateLimit(queue, limit) {
39
+ this.rateLimiters.set(queue, new RateLimiter(limit));
40
+ this.getState(queue).rateLimit = limit;
41
+ }
42
+ /** Clear rate limit */
43
+ clearRateLimit(queue) {
44
+ this.rateLimiters.delete(queue);
45
+ const state = this.queueState.get(queue);
46
+ if (state)
47
+ state.rateLimit = null;
48
+ }
49
+ /** Try to acquire rate limit token */
50
+ tryAcquireRateLimit(queue) {
51
+ const limiter = this.rateLimiters.get(queue);
52
+ return !limiter || limiter.tryAcquire();
53
+ }
54
+ // ============ Concurrency Limiting ============
55
+ /** Set concurrency limit for queue */
56
+ setConcurrency(queue, limit) {
57
+ let limiter = this.concurrencyLimiters.get(queue);
58
+ if (limiter) {
59
+ limiter.setLimit(limit);
60
+ }
61
+ else {
62
+ limiter = new ConcurrencyLimiter(limit);
63
+ this.concurrencyLimiters.set(queue, limiter);
64
+ }
65
+ this.getState(queue).concurrencyLimit = limit;
66
+ }
67
+ /** Clear concurrency limit */
68
+ clearConcurrency(queue) {
69
+ this.concurrencyLimiters.delete(queue);
70
+ const state = this.queueState.get(queue);
71
+ if (state)
72
+ state.concurrencyLimit = null;
73
+ }
74
+ /** Try to acquire concurrency slot */
75
+ tryAcquireConcurrency(queue) {
76
+ const limiter = this.concurrencyLimiters.get(queue);
77
+ return !limiter || limiter.tryAcquire();
78
+ }
79
+ /** Release concurrency slot */
80
+ releaseConcurrency(queue) {
81
+ this.concurrencyLimiters.get(queue)?.release();
82
+ }
83
+ // ============ Queue Management ============
84
+ /** Get all queue names with state */
85
+ getQueueNames() {
86
+ return Array.from(this.queueState.keys());
87
+ }
88
+ /** Delete queue data */
89
+ deleteQueue(queue) {
90
+ this.queueState.delete(queue);
91
+ this.rateLimiters.delete(queue);
92
+ this.concurrencyLimiters.delete(queue);
93
+ }
94
+ /** Get the underlying state map (for backward compatibility) */
95
+ getStateMap() {
96
+ return this.queueState;
97
+ }
98
+ }
99
+ //# sourceMappingURL=limiterManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limiterManager.js","sourceRoot":"","sources":["../../../src/domain/queue/limiterManager.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,16 @@
1
1
  /**
2
2
  * Shard - Container for queues within a shard
3
3
  * Each shard manages multiple queues and their state
4
+ *
5
+ * Refactored to compose smaller modules:
6
+ * - UniqueKeyManager: deduplication with TTL
7
+ * - DlqShard: Dead Letter Queue operations
8
+ * - LimiterManager: rate limiting + concurrency
9
+ * - DependencyTracker: job dependency tracking
10
+ * - TemporalManager: temporal index + delayed job tracking
4
11
  */
5
12
  import type { Job, JobId } from '../types/job';
6
- import { type QueueState, RateLimiter, ConcurrencyLimiter } from '../types/queue';
13
+ import type { QueueState } from '../types/queue';
7
14
  import type { DlqEntry, DlqConfig, DlqFilter } from '../types/dlq';
8
15
  import { FailureReason } from '../types/dlq';
9
16
  import type { StallConfig } from '../types/stall';
@@ -29,150 +36,81 @@ export interface ShardStats {
29
36
  export declare class Shard {
30
37
  /** Priority queues by queue name */
31
38
  readonly queues: Map<string, IndexedPriorityQueue>;
32
- /** Dead letter queue by queue name - now with full metadata */
33
- readonly dlq: Map<string, DlqEntry[]>;
34
- /** DLQ configuration per queue */
35
- readonly dlqConfig: Map<string, DlqConfig>;
36
- /** Stall configuration per queue */
37
- readonly stallConfig: Map<string, StallConfig>;
39
+ /** Unique key manager for deduplication */
40
+ private readonly uniqueKeyManager;
41
+ /** DLQ manager */
42
+ private readonly dlqManager;
43
+ /** Limiter manager for rate/concurrency control */
44
+ private readonly limiterManager;
45
+ /** Dependency tracker */
46
+ private readonly dependencyTracker;
47
+ /** Temporal manager for index and delayed jobs */
48
+ private readonly temporalManager;
38
49
  /** Running counters for O(1) stats - updated on every operation */
39
50
  private readonly stats;
40
- /** Set of delayed job IDs for tracking when they become ready */
41
- private readonly delayedJobIds;
42
- /**
43
- * Min-heap of delayed jobs ordered by runAt for O(k) refresh
44
- * Instead of O(n × queues) iteration
45
- */
46
- private readonly delayedHeap;
47
- /** Map from jobId to current runAt for stale detection in delayedHeap */
48
- private readonly delayedRunAt;
49
- /**
50
- * Temporal index: Skip List for O(log n) insert/delete instead of O(n) splice
51
- * Ordered by createdAt for efficient cleanQueue range queries
52
- */
53
- private readonly temporalIndex;
54
- /** Unique keys per queue for deduplication (with TTL support) */
55
- readonly uniqueKeys: Map<string, Map<string, UniqueKeyEntry>>;
56
- /** Jobs waiting for dependencies */
57
- readonly waitingDeps: Map<JobId, Job>;
58
- /**
59
- * Reverse index: depId -> Set of jobIds waiting for that dependency
60
- * Enables O(1) lookup when a dependency completes instead of O(n) scan
61
- */
62
- readonly dependencyIndex: Map<JobId, Set<JobId>>;
63
- /** Parent jobs waiting for children to complete */
64
- readonly waitingChildren: Map<JobId, Job>;
65
- /** Queue state (pause, rate limit, concurrency) */
66
- readonly queueState: Map<string, QueueState>;
67
51
  /** Active FIFO groups per queue */
68
52
  readonly activeGroups: Map<string, Set<string>>;
69
- /** Rate limiters per queue */
70
- readonly rateLimiters: Map<string, RateLimiter>;
71
- /** Concurrency limiters per queue */
72
- readonly concurrencyLimiters: Map<string, ConcurrencyLimiter>;
73
53
  /** Waiter entry with cancellation flag for O(1) cleanup */
74
54
  private readonly waiters;
55
+ constructor();
75
56
  /** Notify that jobs are available - wakes first non-cancelled waiter */
76
57
  notify(): void;
77
58
  /** Wait for a job to become available (with timeout) */
78
59
  waitForJob(timeoutMs: number): Promise<void>;
79
- /** Get or create queue */
80
60
  getQueue(name: string): IndexedPriorityQueue;
81
- /** Get queue state */
82
61
  getState(name: string): QueueState;
83
- /** Check if queue is paused */
84
62
  isPaused(name: string): boolean;
85
- /** Pause queue */
86
63
  pause(name: string): void;
87
- /** Resume queue */
88
64
  resume(name: string): void;
89
- /** Check if unique key is available (not registered or expired) */
90
65
  isUniqueAvailable(queue: string, key: string): boolean;
91
- /** Get unique key entry (returns null if not found or expired) */
92
66
  getUniqueKeyEntry(queue: string, key: string): UniqueKeyEntry | null;
93
- /** Register unique key (legacy method without TTL) */
94
67
  registerUniqueKey(queue: string, key: string): void;
95
- /** Register unique key with TTL support */
96
68
  registerUniqueKeyWithTtl(queue: string, key: string, jobId: JobId | undefined, ttl?: number): void;
97
- /** Extend TTL for an existing unique key */
98
69
  extendUniqueKeyTtl(queue: string, key: string, ttl: number): boolean;
99
- /** Release unique key */
100
70
  releaseUniqueKey(queue: string, key: string): void;
101
- /** Clean expired unique keys (call periodically) */
102
71
  cleanExpiredUniqueKeys(): number;
103
- /** Check if FIFO group is active */
72
+ get uniqueKeys(): Map<string, Map<string, UniqueKeyEntry>>;
104
73
  isGroupActive(queue: string, groupId: string): boolean;
105
- /** Mark FIFO group as active */
106
74
  activateGroup(queue: string, groupId: string): void;
107
- /** Release FIFO group */
108
75
  releaseGroup(queue: string, groupId: string): void;
109
- /** Set rate limit for queue */
110
76
  setRateLimit(queue: string, limit: number): void;
111
- /** Clear rate limit */
112
77
  clearRateLimit(queue: string): void;
113
- /** Try to acquire rate limit token */
114
78
  tryAcquireRateLimit(queue: string): boolean;
115
- /** Set concurrency limit for queue */
116
79
  setConcurrency(queue: string, limit: number): void;
117
- /** Clear concurrency limit */
118
80
  clearConcurrency(queue: string): void;
119
- /** Try to acquire concurrency slot */
120
81
  tryAcquireConcurrency(queue: string): boolean;
121
- /** Release concurrency slot */
122
82
  releaseConcurrency(queue: string): void;
123
- /** Release all resources for a job */
83
+ get queueState(): Map<string, QueueState>;
84
+ /** Clear limiter data for a queue (rate limits, concurrency) */
85
+ clearQueueLimiters(queue: string): void;
124
86
  releaseJobResources(queue: string, uniqueKey: string | null, groupId: string | null): void;
125
- /**
126
- * Register a job's dependencies in the reverse index
127
- * Call when adding a job to waitingDeps
128
- */
87
+ get waitingDeps(): Map<JobId, Job>;
88
+ get dependencyIndex(): Map<JobId, Set<JobId>>;
89
+ get waitingChildren(): Map<JobId, Job>;
129
90
  registerDependencies(jobId: JobId, dependsOn: JobId[]): void;
130
- /**
131
- * Unregister a job's dependencies from the reverse index
132
- * Call when removing a job from waitingDeps
133
- */
134
91
  unregisterDependencies(jobId: JobId, dependsOn: JobId[]): void;
135
- /**
136
- * Get jobs waiting for a specific dependency - O(1)
137
- */
138
92
  getJobsWaitingFor(depId: JobId): Set<JobId> | undefined;
139
- /** Get DLQ config for queue */
93
+ get dlq(): Map<string, DlqEntry[]>;
94
+ get dlqConfig(): Map<string, DlqConfig>;
95
+ get stallConfig(): Map<string, StallConfig>;
140
96
  getDlqConfig(queue: string): DlqConfig;
141
- /** Set DLQ config for queue */
142
97
  setDlqConfig(queue: string, config: Partial<DlqConfig>): void;
143
- /** Get stall config for queue */
144
98
  getStallConfig(queue: string): StallConfig;
145
- /** Set stall config for queue */
146
99
  setStallConfig(queue: string, config: Partial<StallConfig>): void;
147
- /** Add job to DLQ with full metadata */
148
100
  addToDlq(job: Job, reason?: FailureReason, error?: string | null): DlqEntry;
149
- /** Get DLQ entries (raw) */
150
101
  getDlqEntries(queue: string): DlqEntry[];
151
- /** Get DLQ jobs (for backward compatibility) */
152
102
  getDlq(queue: string, count?: number): Job[];
153
- /** Get DLQ entries with filter */
154
103
  getDlqFiltered(queue: string, filter: DlqFilter): DlqEntry[];
155
- /** Remove entry from DLQ by job ID */
156
104
  removeFromDlq(queue: string, jobId: JobId): DlqEntry | null;
157
- /** Get entries ready for auto-retry */
158
105
  getAutoRetryEntries(queue: string, now?: number): DlqEntry[];
159
- /** Get expired entries for cleanup */
160
106
  getExpiredEntries(queue: string, now?: number): DlqEntry[];
161
- /** Remove expired entries */
162
107
  purgeExpired(queue: string, now?: number): number;
163
- /** Clear DLQ for queue */
164
108
  clearDlq(queue: string): number;
165
- /** Get waiting job count for queue */
166
109
  getWaitingCount(queue: string): number;
167
- /** Get DLQ count for queue */
168
110
  getDlqCount(queue: string): number;
169
- /** Get all queue names in this shard */
170
111
  getQueueNames(): string[];
171
- /** Get job counts grouped by priority for a queue */
172
112
  getCountsPerPriority(queue: string): Map<number, number>;
173
- /** Get shard statistics - O(1) */
174
113
  getStats(): ShardStats;
175
- /** Get internal structure sizes for memory debugging */
176
114
  getInternalSizes(): {
177
115
  delayedJobIds: number;
178
116
  delayedHeap: number;
@@ -180,55 +118,24 @@ export declare class Shard {
180
118
  temporalIndex: number;
181
119
  waiters: number;
182
120
  };
183
- /** Increment queued jobs counter and add to temporal index */
184
121
  incrementQueued(jobId: JobId, isDelayed: boolean, createdAt?: number, queue?: string, runAt?: number): void;
185
- /** Decrement queued jobs counter and remove from temporal index */
186
122
  decrementQueued(jobId: JobId): void;
187
- /** Increment DLQ counter */
188
123
  incrementDlq(): void;
189
- /** Decrement DLQ counter */
190
124
  decrementDlq(count?: number): void;
191
- /**
192
- * Update delayed jobs that have become ready (call periodically)
193
- * O(k) where k = jobs that became ready, instead of O(n × queues)
194
- */
195
125
  refreshDelayedCount(now: number): void;
196
- /** Reset all counters (used after drain/obliterate) */
197
126
  resetQueuedCounters(): void;
198
- /** Reset DLQ counter */
199
127
  resetDlqCounter(): void;
200
- /**
201
- * Add job to temporal index - O(log n) with Skip List
202
- * Previously O(n) with array splice
203
- */
204
- private addToTemporalIndex;
205
- /**
206
- * Get old jobs from temporal index - O(log n + k) where k = returned jobs
207
- * Returns jobs older than threshold, up to limit
208
- */
209
128
  getOldJobs(queue: string, thresholdMs: number, limit: number): Array<{
210
129
  jobId: JobId;
211
130
  createdAt: number;
212
131
  }>;
213
- /**
214
- * Remove job from temporal index (called after job is cleaned)
215
- * O(n) in worst case but typically fast with deleteWhere
216
- */
217
132
  removeFromTemporalIndex(jobId: JobId): void;
218
- /** Clear temporal index for a queue */
219
133
  clearTemporalIndexForQueue(queue: string): void;
220
- /**
221
- * Clean orphaned temporal index entries.
222
- * Removes entries for jobs that no longer exist in the queue.
223
- * Call periodically to prevent memory leaks.
224
- */
225
134
  cleanOrphanedTemporalEntries(): number;
226
- /** Drain all waiting jobs from queue, returns drained job IDs for cleanup */
227
135
  drain(queue: string): {
228
136
  count: number;
229
137
  jobIds: JobId[];
230
138
  };
231
- /** Obliterate queue completely */
232
139
  obliterate(queue: string): void;
233
140
  }
234
141
  //# sourceMappingURL=shard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"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"}