atomic-queues 1.0.13
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.
- package/README.md +686 -0
- package/dist/decorators/decorators.d.ts +67 -0
- package/dist/decorators/decorators.d.ts.map +1 -0
- package/dist/decorators/decorators.js +91 -0
- package/dist/decorators/decorators.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +18 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/domain/index.d.ts +5 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +21 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/interfaces.d.ts +614 -0
- package/dist/domain/interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces.js +19 -0
- package/dist/domain/interfaces.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/module/atomic-queues.module.d.ts +97 -0
- package/dist/module/atomic-queues.module.d.ts.map +1 -0
- package/dist/module/atomic-queues.module.js +197 -0
- package/dist/module/atomic-queues.module.js.map +1 -0
- package/dist/module/index.d.ts +2 -0
- package/dist/module/index.d.ts.map +1 -0
- package/dist/module/index.js +18 -0
- package/dist/module/index.js.map +1 -0
- package/dist/services/constants.d.ts +10 -0
- package/dist/services/constants.d.ts.map +1 -0
- package/dist/services/constants.js +13 -0
- package/dist/services/constants.js.map +1 -0
- package/dist/services/cron-manager/cron-manager.service.d.ts +188 -0
- package/dist/services/cron-manager/cron-manager.service.d.ts.map +1 -0
- package/dist/services/cron-manager/cron-manager.service.js +534 -0
- package/dist/services/cron-manager/cron-manager.service.js.map +1 -0
- package/dist/services/cron-manager/index.d.ts +2 -0
- package/dist/services/cron-manager/index.d.ts.map +1 -0
- package/dist/services/cron-manager/index.js +18 -0
- package/dist/services/cron-manager/index.js.map +1 -0
- package/dist/services/index-manager/index-manager.service.d.ts +146 -0
- package/dist/services/index-manager/index-manager.service.d.ts.map +1 -0
- package/dist/services/index-manager/index-manager.service.js +337 -0
- package/dist/services/index-manager/index-manager.service.js.map +1 -0
- package/dist/services/index-manager/index.d.ts +2 -0
- package/dist/services/index-manager/index.d.ts.map +1 -0
- package/dist/services/index-manager/index.js +18 -0
- package/dist/services/index-manager/index.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +26 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/job-processor/index.d.ts +2 -0
- package/dist/services/job-processor/index.d.ts.map +1 -0
- package/dist/services/job-processor/index.js +18 -0
- package/dist/services/job-processor/index.js.map +1 -0
- package/dist/services/job-processor/job-processor.service.d.ts +156 -0
- package/dist/services/job-processor/job-processor.service.d.ts.map +1 -0
- package/dist/services/job-processor/job-processor.service.js +331 -0
- package/dist/services/job-processor/job-processor.service.js.map +1 -0
- package/dist/services/queue-manager/index.d.ts +2 -0
- package/dist/services/queue-manager/index.d.ts.map +1 -0
- package/dist/services/queue-manager/index.js +18 -0
- package/dist/services/queue-manager/index.js.map +1 -0
- package/dist/services/queue-manager/queue-manager.service.d.ts +128 -0
- package/dist/services/queue-manager/queue-manager.service.d.ts.map +1 -0
- package/dist/services/queue-manager/queue-manager.service.js +308 -0
- package/dist/services/queue-manager/queue-manager.service.js.map +1 -0
- package/dist/services/resource-lock/index.d.ts +2 -0
- package/dist/services/resource-lock/index.d.ts.map +1 -0
- package/dist/services/resource-lock/index.js +18 -0
- package/dist/services/resource-lock/index.js.map +1 -0
- package/dist/services/resource-lock/resource-lock.service.d.ts +124 -0
- package/dist/services/resource-lock/resource-lock.service.d.ts.map +1 -0
- package/dist/services/resource-lock/resource-lock.service.js +379 -0
- package/dist/services/resource-lock/resource-lock.service.js.map +1 -0
- package/dist/services/service-queue/index.d.ts +2 -0
- package/dist/services/service-queue/index.d.ts.map +1 -0
- package/dist/services/service-queue/index.js +18 -0
- package/dist/services/service-queue/index.js.map +1 -0
- package/dist/services/service-queue/service-queue.service.d.ts +232 -0
- package/dist/services/service-queue/service-queue.service.d.ts.map +1 -0
- package/dist/services/service-queue/service-queue.service.js +647 -0
- package/dist/services/service-queue/service-queue.service.js.map +1 -0
- package/dist/services/shutdown-state/index.d.ts +2 -0
- package/dist/services/shutdown-state/index.d.ts.map +1 -0
- package/dist/services/shutdown-state/index.js +18 -0
- package/dist/services/shutdown-state/index.js.map +1 -0
- package/dist/services/shutdown-state/shutdown-state.service.d.ts +69 -0
- package/dist/services/shutdown-state/shutdown-state.service.d.ts.map +1 -0
- package/dist/services/shutdown-state/shutdown-state.service.js +127 -0
- package/dist/services/shutdown-state/shutdown-state.service.js.map +1 -0
- package/dist/services/worker-manager/index.d.ts +2 -0
- package/dist/services/worker-manager/index.d.ts.map +1 -0
- package/dist/services/worker-manager/index.js +18 -0
- package/dist/services/worker-manager/index.js.map +1 -0
- package/dist/services/worker-manager/worker-manager.service.d.ts +163 -0
- package/dist/services/worker-manager/worker-manager.service.d.ts.map +1 -0
- package/dist/services/worker-manager/worker-manager.service.js +460 -0
- package/dist/services/worker-manager/worker-manager.service.js.map +1 -0
- package/dist/utils/helpers.d.ts +124 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +229 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ATOMIC QUEUES - Core Domain Interfaces
|
|
4
|
+
* =============================================================================
|
|
5
|
+
*
|
|
6
|
+
* This file defines all the core interfaces for the AtomicQueues library.
|
|
7
|
+
* These abstractions enable atomic process handling per entity (user, table, etc.)
|
|
8
|
+
* with features like:
|
|
9
|
+
*
|
|
10
|
+
* - Dynamic per-entity queue creation
|
|
11
|
+
* - Worker lifecycle management with heartbeat TTL
|
|
12
|
+
* - Distributed resource locking (Redis/Lua scripts)
|
|
13
|
+
* - Graceful shutdown coordination via pub/sub
|
|
14
|
+
* - Cron-based worker spawning/cleanup
|
|
15
|
+
* - CQRS command/query dynamic execution
|
|
16
|
+
*/
|
|
17
|
+
import { Job, Queue, Worker } from 'bullmq';
|
|
18
|
+
/**
|
|
19
|
+
* Redis connection configuration
|
|
20
|
+
*/
|
|
21
|
+
export interface IRedisConfig {
|
|
22
|
+
host?: string;
|
|
23
|
+
port?: number;
|
|
24
|
+
password?: string;
|
|
25
|
+
db?: number;
|
|
26
|
+
url?: string;
|
|
27
|
+
maxRetriesPerRequest?: number | null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Worker configuration options
|
|
31
|
+
*/
|
|
32
|
+
export interface IWorkerConfig {
|
|
33
|
+
/** Number of concurrent jobs a worker can process */
|
|
34
|
+
concurrency?: number;
|
|
35
|
+
/** Interval in ms to check for stalled jobs */
|
|
36
|
+
stalledInterval?: number;
|
|
37
|
+
/** Duration in ms that a job lock is held */
|
|
38
|
+
lockDuration?: number;
|
|
39
|
+
/** Maximum number of times a job can be marked as stalled before failing */
|
|
40
|
+
maxStalledCount?: number;
|
|
41
|
+
/** Heartbeat TTL in seconds for worker liveness tracking */
|
|
42
|
+
heartbeatTTL?: number;
|
|
43
|
+
/** Interval in ms between heartbeat updates */
|
|
44
|
+
heartbeatInterval?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Queue configuration options
|
|
48
|
+
*/
|
|
49
|
+
export interface IQueueConfig {
|
|
50
|
+
/** Default job options for the queue */
|
|
51
|
+
defaultJobOptions?: IJobOptions;
|
|
52
|
+
/** Limiter configuration for rate limiting */
|
|
53
|
+
limiter?: {
|
|
54
|
+
groupKey?: string;
|
|
55
|
+
max?: number;
|
|
56
|
+
duration?: number;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Job configuration options
|
|
61
|
+
*/
|
|
62
|
+
export interface IJobOptions {
|
|
63
|
+
/** Remove job from queue when completed */
|
|
64
|
+
removeOnComplete?: boolean | number;
|
|
65
|
+
/** Remove job from queue when failed */
|
|
66
|
+
removeOnFail?: boolean | number;
|
|
67
|
+
/** Number of attempts before marking as failed */
|
|
68
|
+
attempts?: number;
|
|
69
|
+
/** Backoff strategy for retries */
|
|
70
|
+
backoff?: {
|
|
71
|
+
type: 'fixed' | 'exponential';
|
|
72
|
+
delay: number;
|
|
73
|
+
};
|
|
74
|
+
/** Job priority (lower = higher priority) */
|
|
75
|
+
priority?: number;
|
|
76
|
+
/** Delay in ms before the job becomes available */
|
|
77
|
+
delay?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Service queue configuration for global singleton operations
|
|
81
|
+
*/
|
|
82
|
+
export interface IServiceQueueConfig {
|
|
83
|
+
/** Whether to enable the service queue (default: true) */
|
|
84
|
+
enabled?: boolean;
|
|
85
|
+
/** Custom queue name (default: {keyPrefix}-service-queue) */
|
|
86
|
+
queueName?: string;
|
|
87
|
+
/** Custom worker name (default: {keyPrefix}-service-worker) */
|
|
88
|
+
workerName?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Main module configuration
|
|
92
|
+
*/
|
|
93
|
+
export interface IAtomicQueuesModuleConfig {
|
|
94
|
+
/** Redis connection configuration */
|
|
95
|
+
redis: IRedisConfig;
|
|
96
|
+
/** Default worker configuration */
|
|
97
|
+
workerDefaults?: IWorkerConfig;
|
|
98
|
+
/** Default queue configuration */
|
|
99
|
+
queueDefaults?: IQueueConfig;
|
|
100
|
+
/** Enable cron-based worker management */
|
|
101
|
+
enableCronManager?: boolean;
|
|
102
|
+
/** Cron interval in ms for worker management cycle */
|
|
103
|
+
cronInterval?: number;
|
|
104
|
+
/** Prefix for all Redis keys */
|
|
105
|
+
keyPrefix?: string;
|
|
106
|
+
/** Service queue configuration for global atomic operations */
|
|
107
|
+
serviceQueue?: IServiceQueueConfig;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Represents a managed queue instance
|
|
111
|
+
*/
|
|
112
|
+
export interface IManagedQueue {
|
|
113
|
+
name: string;
|
|
114
|
+
queue: Queue;
|
|
115
|
+
createdAt: Date;
|
|
116
|
+
entityId: string;
|
|
117
|
+
entityType: string;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Queue manager service interface for dynamic queue creation/destruction
|
|
121
|
+
*/
|
|
122
|
+
export interface IQueueManager {
|
|
123
|
+
/**
|
|
124
|
+
* Get or create a queue for the given name
|
|
125
|
+
*/
|
|
126
|
+
getOrCreateQueue(queueName: string): Queue;
|
|
127
|
+
/**
|
|
128
|
+
* Get or create an entity-specific queue
|
|
129
|
+
*/
|
|
130
|
+
getOrCreateEntityQueue(entityType: string, entityId: string): Queue;
|
|
131
|
+
/**
|
|
132
|
+
* Close and remove a specific queue
|
|
133
|
+
*/
|
|
134
|
+
closeQueue(queueName: string): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Close all managed queues
|
|
137
|
+
*/
|
|
138
|
+
closeAllQueues(): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Get all queue names
|
|
141
|
+
*/
|
|
142
|
+
getQueueNames(): string[];
|
|
143
|
+
/**
|
|
144
|
+
* Delete a specific job from a queue
|
|
145
|
+
*/
|
|
146
|
+
deleteJob(queueName: string, jobId: string): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Add a job to a queue
|
|
149
|
+
*/
|
|
150
|
+
addJob<T>(queueName: string, jobName: string, data: T, options?: IJobOptions): Promise<Job<T>>;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Worker state tracking
|
|
154
|
+
*/
|
|
155
|
+
export interface IWorkerState {
|
|
156
|
+
workerId: string;
|
|
157
|
+
workerName: string;
|
|
158
|
+
nodeId: string;
|
|
159
|
+
entityId?: string;
|
|
160
|
+
entityType?: string;
|
|
161
|
+
status: 'starting' | 'ready' | 'processing' | 'closing' | 'closed';
|
|
162
|
+
createdAt: Date;
|
|
163
|
+
lastHeartbeat: Date;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Worker lifecycle events
|
|
167
|
+
*/
|
|
168
|
+
export interface IWorkerEvents {
|
|
169
|
+
onReady?: (worker: Worker, workerName: string) => void | Promise<void>;
|
|
170
|
+
onCompleted?: (job: Job, workerName: string) => void | Promise<void>;
|
|
171
|
+
onFailed?: (job: Job | undefined, error: Error, workerName: string) => void | Promise<void>;
|
|
172
|
+
onProgress?: (job: Job, progress: number | object) => void | Promise<void>;
|
|
173
|
+
onStalled?: (jobId: string, workerName: string) => void | Promise<void>;
|
|
174
|
+
onClosing?: (workerName: string) => void | Promise<void>;
|
|
175
|
+
onClosed?: (workerName: string) => void | Promise<void>;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Worker creation options
|
|
179
|
+
*/
|
|
180
|
+
export interface IWorkerCreationOptions {
|
|
181
|
+
workerName: string;
|
|
182
|
+
queueName: string;
|
|
183
|
+
config?: IWorkerConfig;
|
|
184
|
+
events?: IWorkerEvents;
|
|
185
|
+
processor: (job: Job) => Promise<unknown>;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Worker manager service interface
|
|
189
|
+
*/
|
|
190
|
+
export interface IWorkerManager {
|
|
191
|
+
/**
|
|
192
|
+
* Create a new worker with automatic lifecycle management
|
|
193
|
+
*/
|
|
194
|
+
createWorker(options: IWorkerCreationOptions): Promise<Worker>;
|
|
195
|
+
/**
|
|
196
|
+
* Check if a worker exists and is alive
|
|
197
|
+
*/
|
|
198
|
+
workerExists(workerName: string): Promise<boolean>;
|
|
199
|
+
/**
|
|
200
|
+
* Get all running workers for current node
|
|
201
|
+
*/
|
|
202
|
+
getNodeWorkers(): Promise<string[]>;
|
|
203
|
+
/**
|
|
204
|
+
* Get all running workers across all nodes
|
|
205
|
+
*/
|
|
206
|
+
getAllWorkers(): Promise<string[]>;
|
|
207
|
+
/**
|
|
208
|
+
* Get all workers for a specific entity
|
|
209
|
+
*/
|
|
210
|
+
getEntityWorkers(entityType: string, entityId: string): Promise<string[]>;
|
|
211
|
+
/**
|
|
212
|
+
* Signal a worker to close gracefully
|
|
213
|
+
*/
|
|
214
|
+
signalWorkerClose(workerName: string): Promise<void>;
|
|
215
|
+
/**
|
|
216
|
+
* Signal all workers on current node to close
|
|
217
|
+
*/
|
|
218
|
+
signalNodeWorkersClose(): Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* Wait for all node workers to close
|
|
221
|
+
*/
|
|
222
|
+
waitForWorkersToClose(timeoutMs?: number): Promise<void>;
|
|
223
|
+
/**
|
|
224
|
+
* Reset worker heartbeat TTL
|
|
225
|
+
*/
|
|
226
|
+
resetWorkerHeartbeat(workerName: string): Promise<void>;
|
|
227
|
+
/**
|
|
228
|
+
* Remove worker heartbeat (mark as dead)
|
|
229
|
+
*/
|
|
230
|
+
removeWorkerHeartbeat(workerName: string): Promise<void>;
|
|
231
|
+
/**
|
|
232
|
+
* Get the node ID for this instance
|
|
233
|
+
*/
|
|
234
|
+
getNodeId(): string;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Lock state for a resource
|
|
238
|
+
*/
|
|
239
|
+
export interface IResourceLock {
|
|
240
|
+
resourceId: string;
|
|
241
|
+
resourceType: string;
|
|
242
|
+
ownerId: string;
|
|
243
|
+
ownerType: string;
|
|
244
|
+
acquiredAt: Date;
|
|
245
|
+
expiresAt: Date;
|
|
246
|
+
metadata?: Record<string, unknown>;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Lock acquisition result
|
|
250
|
+
*/
|
|
251
|
+
export interface ILockResult {
|
|
252
|
+
acquired: boolean;
|
|
253
|
+
lock?: IResourceLock;
|
|
254
|
+
reason?: string;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Resource lock service interface for distributed locking
|
|
258
|
+
*/
|
|
259
|
+
export interface IResourceLockService {
|
|
260
|
+
/**
|
|
261
|
+
* Acquire a lock on a resource
|
|
262
|
+
*/
|
|
263
|
+
acquireLock(resourceType: string, resourceId: string, ownerId: string, ownerType: string, ttlSeconds?: number, metadata?: Record<string, unknown>): Promise<ILockResult>;
|
|
264
|
+
/**
|
|
265
|
+
* Release a lock on a resource
|
|
266
|
+
*/
|
|
267
|
+
releaseLock(resourceType: string, resourceId: string): Promise<boolean>;
|
|
268
|
+
/**
|
|
269
|
+
* Check if a resource is locked
|
|
270
|
+
*/
|
|
271
|
+
isLocked(resourceType: string, resourceId: string): Promise<boolean>;
|
|
272
|
+
/**
|
|
273
|
+
* Get lock info for a resource
|
|
274
|
+
*/
|
|
275
|
+
getLockInfo(resourceType: string, resourceId: string): Promise<IResourceLock | null>;
|
|
276
|
+
/**
|
|
277
|
+
* Get all locked resources of a type for an owner
|
|
278
|
+
*/
|
|
279
|
+
getOwnerLocks(ownerType: string, ownerId: string): Promise<IResourceLock[]>;
|
|
280
|
+
/**
|
|
281
|
+
* Get available (unlocked) resource from a pool
|
|
282
|
+
*/
|
|
283
|
+
getAvailableResource(resourceType: string, candidateIds: string[], ownerId: string, ownerType: string, ttlSeconds?: number): Promise<ILockResult>;
|
|
284
|
+
/**
|
|
285
|
+
* Extend lock TTL
|
|
286
|
+
*/
|
|
287
|
+
extendLock(resourceType: string, resourceId: string, ttlSeconds: number): Promise<boolean>;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Job data structure for atomic processing
|
|
291
|
+
*/
|
|
292
|
+
export interface IAtomicJobData<T = unknown> {
|
|
293
|
+
/** Unique job identifier */
|
|
294
|
+
uuid: string;
|
|
295
|
+
/** Entity ID this job belongs to */
|
|
296
|
+
entityId: string;
|
|
297
|
+
/** Entity type (user, table, etc.) */
|
|
298
|
+
entityType: string;
|
|
299
|
+
/** Command/Query class name to execute */
|
|
300
|
+
commandName?: string;
|
|
301
|
+
/** Type of operation */
|
|
302
|
+
type: 'command' | 'query' | 'custom';
|
|
303
|
+
/** Payload data */
|
|
304
|
+
payload: T;
|
|
305
|
+
/** Additional metadata */
|
|
306
|
+
metadata?: Record<string, unknown>;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Job processing result
|
|
310
|
+
*/
|
|
311
|
+
export interface IJobResult<T = unknown> {
|
|
312
|
+
success: boolean;
|
|
313
|
+
result?: T;
|
|
314
|
+
error?: string;
|
|
315
|
+
processingTime: number;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Job processor function type
|
|
319
|
+
*/
|
|
320
|
+
export type JobProcessor<T = unknown, R = unknown> = (job: Job<IAtomicJobData<T>>) => Promise<R>;
|
|
321
|
+
/**
|
|
322
|
+
* Job processor registry interface
|
|
323
|
+
*/
|
|
324
|
+
export interface IJobProcessorRegistry {
|
|
325
|
+
/**
|
|
326
|
+
* Register a processor for a job type
|
|
327
|
+
*/
|
|
328
|
+
registerProcessor<T, R>(jobType: string, processor: JobProcessor<T, R>): void;
|
|
329
|
+
/**
|
|
330
|
+
* Get processor for a job type
|
|
331
|
+
*/
|
|
332
|
+
getProcessor<T, R>(jobType: string): JobProcessor<T, R> | undefined;
|
|
333
|
+
/**
|
|
334
|
+
* Check if processor exists
|
|
335
|
+
*/
|
|
336
|
+
hasProcessor(jobType: string): boolean;
|
|
337
|
+
/**
|
|
338
|
+
* Get all registered job types
|
|
339
|
+
*/
|
|
340
|
+
getRegisteredTypes(): string[];
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Dynamic command/query executor interface
|
|
344
|
+
*/
|
|
345
|
+
export interface IDynamicExecutor {
|
|
346
|
+
/**
|
|
347
|
+
* Execute a command by class name
|
|
348
|
+
*/
|
|
349
|
+
executeCommand<T>(commandName: string, payload: T): Promise<unknown>;
|
|
350
|
+
/**
|
|
351
|
+
* Execute a query by class name
|
|
352
|
+
*/
|
|
353
|
+
executeQuery<T>(queryName: string, payload: T): Promise<unknown>;
|
|
354
|
+
/**
|
|
355
|
+
* Register command module for dynamic loading
|
|
356
|
+
*/
|
|
357
|
+
registerCommandModule(modulePath: string): void;
|
|
358
|
+
/**
|
|
359
|
+
* Register query module for dynamic loading
|
|
360
|
+
*/
|
|
361
|
+
registerQueryModule(modulePath: string): void;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Worker scaling decision
|
|
365
|
+
*/
|
|
366
|
+
export interface IScalingDecision {
|
|
367
|
+
entityId: string;
|
|
368
|
+
entityType: string;
|
|
369
|
+
currentWorkers: number;
|
|
370
|
+
desiredWorkers: number;
|
|
371
|
+
action: 'spawn' | 'terminate' | 'none';
|
|
372
|
+
count: number;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Entity scaling configuration
|
|
376
|
+
*/
|
|
377
|
+
export interface IEntityScalingConfig {
|
|
378
|
+
entityType: string;
|
|
379
|
+
/** Function to get desired worker count for an entity */
|
|
380
|
+
getDesiredWorkerCount: (entityId: string) => Promise<number>;
|
|
381
|
+
/** Function to get all active entity IDs */
|
|
382
|
+
getActiveEntityIds: () => Promise<string[]>;
|
|
383
|
+
/** Maximum workers per entity */
|
|
384
|
+
maxWorkersPerEntity?: number;
|
|
385
|
+
/** Function called when spawning a worker */
|
|
386
|
+
onSpawnWorker?: (entityId: string) => Promise<void>;
|
|
387
|
+
/** Function called when terminating a worker */
|
|
388
|
+
onTerminateWorker?: (entityId: string, workerId: string) => Promise<void>;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Cron manager interface for worker lifecycle management
|
|
392
|
+
*/
|
|
393
|
+
export interface ICronManager {
|
|
394
|
+
/**
|
|
395
|
+
* Register an entity type for automatic scaling
|
|
396
|
+
*/
|
|
397
|
+
registerEntityType(config: IEntityScalingConfig): void;
|
|
398
|
+
/**
|
|
399
|
+
* Run scaling cycle for all registered entity types
|
|
400
|
+
*/
|
|
401
|
+
runScalingCycle(): Promise<IScalingDecision[]>;
|
|
402
|
+
/**
|
|
403
|
+
* Get current scaling state
|
|
404
|
+
*/
|
|
405
|
+
getScalingState(): Promise<Map<string, IScalingDecision[]>>;
|
|
406
|
+
/**
|
|
407
|
+
* Start the cron manager
|
|
408
|
+
*/
|
|
409
|
+
start(intervalMs?: number): void;
|
|
410
|
+
/**
|
|
411
|
+
* Stop the cron manager
|
|
412
|
+
*/
|
|
413
|
+
stop(): void;
|
|
414
|
+
/**
|
|
415
|
+
* Check if cron manager is running
|
|
416
|
+
*/
|
|
417
|
+
isRunning(): boolean;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Index entry for tracking jobs, workers, queues
|
|
421
|
+
*/
|
|
422
|
+
export interface IIndexEntry {
|
|
423
|
+
id: string;
|
|
424
|
+
type: 'job' | 'worker' | 'queue' | 'death' | 'custom';
|
|
425
|
+
entityId: string;
|
|
426
|
+
entityType: string;
|
|
427
|
+
createdAt: Date;
|
|
428
|
+
metadata?: Record<string, unknown>;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Index manager interface for tracking various entities
|
|
432
|
+
*/
|
|
433
|
+
export interface IIndexManager {
|
|
434
|
+
/**
|
|
435
|
+
* Index a job for an entity
|
|
436
|
+
*/
|
|
437
|
+
indexJob(entityType: string, entityId: string, jobId: string): Promise<void>;
|
|
438
|
+
/**
|
|
439
|
+
* Remove job index
|
|
440
|
+
*/
|
|
441
|
+
removeJobIndex(entityType: string, entityId: string, jobId: string): Promise<void>;
|
|
442
|
+
/**
|
|
443
|
+
* Get all job IDs for an entity
|
|
444
|
+
*/
|
|
445
|
+
getEntityJobs(entityType: string, entityId: string): Promise<string[]>;
|
|
446
|
+
/**
|
|
447
|
+
* Get all entities with jobs
|
|
448
|
+
*/
|
|
449
|
+
getEntitiesWithJobs(entityType: string): Promise<Record<string, number>>;
|
|
450
|
+
/**
|
|
451
|
+
* Index a worker death signal
|
|
452
|
+
*/
|
|
453
|
+
indexWorkerDeath(entityType: string, entityId: string, deathId: string): Promise<void>;
|
|
454
|
+
/**
|
|
455
|
+
* Remove worker death index
|
|
456
|
+
*/
|
|
457
|
+
removeWorkerDeathIndex(entityType: string, entityId: string, deathId: string): Promise<void>;
|
|
458
|
+
/**
|
|
459
|
+
* Get queued worker deaths for an entity
|
|
460
|
+
*/
|
|
461
|
+
getQueuedWorkerDeaths(entityType: string, entityId: string): Promise<string[]>;
|
|
462
|
+
/**
|
|
463
|
+
* Index entity queue
|
|
464
|
+
*/
|
|
465
|
+
indexEntityQueue(entityType: string, entityId: string): Promise<void>;
|
|
466
|
+
/**
|
|
467
|
+
* Remove entity queue index
|
|
468
|
+
*/
|
|
469
|
+
removeEntityQueueIndex(entityType: string, entityId: string): Promise<void>;
|
|
470
|
+
/**
|
|
471
|
+
* Get all entities with active queues
|
|
472
|
+
*/
|
|
473
|
+
getEntitiesWithQueues(entityType: string): Promise<string[]>;
|
|
474
|
+
/**
|
|
475
|
+
* Index a queue death signal
|
|
476
|
+
*/
|
|
477
|
+
indexQueueDeath(entityType: string, entityId: string): Promise<void>;
|
|
478
|
+
/**
|
|
479
|
+
* Remove queue death index
|
|
480
|
+
*/
|
|
481
|
+
removeQueueDeathIndex(entityType: string, entityId: string): Promise<void>;
|
|
482
|
+
/**
|
|
483
|
+
* Get all entities with queued queue deaths
|
|
484
|
+
*/
|
|
485
|
+
getEntitiesWithQueuedQueueDeaths(entityType: string): Promise<string[]>;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Socket connection tracking interface
|
|
489
|
+
*/
|
|
490
|
+
export interface IConnectionTracker {
|
|
491
|
+
/**
|
|
492
|
+
* Track a socket connection for an entity
|
|
493
|
+
*/
|
|
494
|
+
trackConnection(entityType: string, entityId: string, socketId: string, nodeId: string): Promise<void>;
|
|
495
|
+
/**
|
|
496
|
+
* Untrack a socket connection
|
|
497
|
+
*/
|
|
498
|
+
untrackConnection(entityType: string, entityId: string, socketId: string): Promise<void>;
|
|
499
|
+
/**
|
|
500
|
+
* Get all socket connections for an entity
|
|
501
|
+
*/
|
|
502
|
+
getEntityConnections(entityType: string, entityId: string): Promise<string[]>;
|
|
503
|
+
/**
|
|
504
|
+
* Get entity connections for a specific node
|
|
505
|
+
*/
|
|
506
|
+
getEntityNodeConnections(entityType: string, entityId: string, nodeId: string): Promise<string[]>;
|
|
507
|
+
/**
|
|
508
|
+
* Untrack all connections for current node
|
|
509
|
+
*/
|
|
510
|
+
untrackNodeConnections(): Promise<void>;
|
|
511
|
+
/**
|
|
512
|
+
* Check if entity has active connections
|
|
513
|
+
*/
|
|
514
|
+
hasActiveConnections(entityType: string, entityId: string): Promise<boolean>;
|
|
515
|
+
/**
|
|
516
|
+
* Get node ID for a socket connection
|
|
517
|
+
*/
|
|
518
|
+
getNodeForSocket(entityType: string, entityId: string, socketId: string): Promise<string | null>;
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Event types for pub/sub communication
|
|
522
|
+
*/
|
|
523
|
+
export type AtomicQueueEventType = 'worker:shutdown' | 'worker:ready' | 'worker:closed' | 'job:completed' | 'job:failed' | 'job:progress' | 'queue:closed' | 'custom';
|
|
524
|
+
/**
|
|
525
|
+
* Event payload structure
|
|
526
|
+
*/
|
|
527
|
+
export interface IAtomicQueueEvent<T = unknown> {
|
|
528
|
+
type: AtomicQueueEventType;
|
|
529
|
+
nodeId: string;
|
|
530
|
+
workerId?: string;
|
|
531
|
+
entityId?: string;
|
|
532
|
+
entityType?: string;
|
|
533
|
+
timestamp: Date;
|
|
534
|
+
data?: T;
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Event bus interface for internal pub/sub
|
|
538
|
+
*/
|
|
539
|
+
export interface IEventBus {
|
|
540
|
+
/**
|
|
541
|
+
* Publish an event
|
|
542
|
+
*/
|
|
543
|
+
publish<T>(channel: string, event: IAtomicQueueEvent<T>): Promise<void>;
|
|
544
|
+
/**
|
|
545
|
+
* Subscribe to a channel
|
|
546
|
+
*/
|
|
547
|
+
subscribe(channel: string, handler: (event: IAtomicQueueEvent) => void | Promise<void>): Promise<void>;
|
|
548
|
+
/**
|
|
549
|
+
* Unsubscribe from a channel
|
|
550
|
+
*/
|
|
551
|
+
unsubscribe(channel: string): Promise<void>;
|
|
552
|
+
/**
|
|
553
|
+
* Subscribe to worker shutdown events for a specific worker
|
|
554
|
+
*/
|
|
555
|
+
subscribeToWorkerShutdown(workerName: string, handler: () => void | Promise<void>): Promise<void>;
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Atomic process status
|
|
559
|
+
*/
|
|
560
|
+
export type AtomicProcessStatus = 'pending' | 'processing' | 'completed' | 'failed';
|
|
561
|
+
/**
|
|
562
|
+
* Atomic process state
|
|
563
|
+
*/
|
|
564
|
+
export interface IAtomicProcessState {
|
|
565
|
+
uuid: string;
|
|
566
|
+
status: AtomicProcessStatus;
|
|
567
|
+
entityId: string;
|
|
568
|
+
entityType: string;
|
|
569
|
+
commandName?: string;
|
|
570
|
+
createdAt: Date;
|
|
571
|
+
updatedAt: Date;
|
|
572
|
+
result?: unknown;
|
|
573
|
+
error?: string;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Atomic process status tracker interface
|
|
577
|
+
*/
|
|
578
|
+
export interface IAtomicProcessTracker {
|
|
579
|
+
/**
|
|
580
|
+
* Set process status
|
|
581
|
+
*/
|
|
582
|
+
setStatus(uuid: string, status: AtomicProcessStatus): Promise<void>;
|
|
583
|
+
/**
|
|
584
|
+
* Get process status
|
|
585
|
+
*/
|
|
586
|
+
getStatus(uuid: string): Promise<IAtomicProcessState | null>;
|
|
587
|
+
/**
|
|
588
|
+
* Set process result
|
|
589
|
+
*/
|
|
590
|
+
setResult(uuid: string, result: unknown): Promise<void>;
|
|
591
|
+
/**
|
|
592
|
+
* Set process error
|
|
593
|
+
*/
|
|
594
|
+
setError(uuid: string, error: string): Promise<void>;
|
|
595
|
+
/**
|
|
596
|
+
* Clean up old process states
|
|
597
|
+
*/
|
|
598
|
+
cleanup(maxAgeMs?: number): Promise<number>;
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Deep partial type utility
|
|
602
|
+
*/
|
|
603
|
+
export type DeepPartial<T> = {
|
|
604
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
605
|
+
};
|
|
606
|
+
/**
|
|
607
|
+
* Constructor type
|
|
608
|
+
*/
|
|
609
|
+
export type Constructor<T = unknown> = new (...args: unknown[]) => T;
|
|
610
|
+
/**
|
|
611
|
+
* Async factory function type
|
|
612
|
+
*/
|
|
613
|
+
export type AsyncFactory<T> = () => Promise<T> | T;
|
|
614
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/domain/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* =============================================================================
|
|
4
|
+
* ATOMIC QUEUES - Core Domain Interfaces
|
|
5
|
+
* =============================================================================
|
|
6
|
+
*
|
|
7
|
+
* This file defines all the core interfaces for the AtomicQueues library.
|
|
8
|
+
* These abstractions enable atomic process handling per entity (user, table, etc.)
|
|
9
|
+
* with features like:
|
|
10
|
+
*
|
|
11
|
+
* - Dynamic per-entity queue creation
|
|
12
|
+
* - Worker lifecycle management with heartbeat TTL
|
|
13
|
+
* - Distributed resource locking (Redis/Lua scripts)
|
|
14
|
+
* - Graceful shutdown coordination via pub/sub
|
|
15
|
+
* - Cron-based worker spawning/cleanup
|
|
16
|
+
* - CQRS command/query dynamic execution
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/domain/interfaces.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ATOMIC QUEUES
|
|
4
|
+
* =============================================================================
|
|
5
|
+
*
|
|
6
|
+
* A plug-and-play NestJS library for atomic process handling per entity
|
|
7
|
+
* with BullMQ, Redis distributed locking, and dynamic worker management.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Dynamic per-entity queue creation
|
|
11
|
+
* - Worker lifecycle management with heartbeat TTL
|
|
12
|
+
* - Distributed resource locking (Redis/Lua scripts)
|
|
13
|
+
* - Graceful shutdown coordination via pub/sub
|
|
14
|
+
* - Cron-based worker spawning/cleanup
|
|
15
|
+
* - CQRS command/query dynamic execution
|
|
16
|
+
* - Index tracking for jobs, workers, and queues
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { AtomicQueuesModule, QueueManagerService, WorkerManagerService } from 'atomic-queues';
|
|
21
|
+
*
|
|
22
|
+
* @Module({
|
|
23
|
+
* imports: [
|
|
24
|
+
* AtomicQueuesModule.forRoot({
|
|
25
|
+
* redis: { host: 'localhost', port: 6379 },
|
|
26
|
+
* enableCronManager: true,
|
|
27
|
+
* }),
|
|
28
|
+
* ],
|
|
29
|
+
* })
|
|
30
|
+
* export class AppModule {}
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @packageDocumentation
|
|
34
|
+
*/
|
|
35
|
+
export * from './domain';
|
|
36
|
+
export * from './module';
|
|
37
|
+
export * from './services';
|
|
38
|
+
export * from './decorators';
|
|
39
|
+
export * from './utils';
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|