flashq 0.1.0

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 (78) hide show
  1. package/README.md +283 -0
  2. package/dist/client/advanced.d.ts +174 -0
  3. package/dist/client/advanced.d.ts.map +1 -0
  4. package/dist/client/advanced.js +248 -0
  5. package/dist/client/advanced.js.map +1 -0
  6. package/dist/client/connection.d.ts +103 -0
  7. package/dist/client/connection.d.ts.map +1 -0
  8. package/dist/client/connection.js +570 -0
  9. package/dist/client/connection.js.map +1 -0
  10. package/dist/client/core.d.ts +119 -0
  11. package/dist/client/core.d.ts.map +1 -0
  12. package/dist/client/core.js +257 -0
  13. package/dist/client/core.js.map +1 -0
  14. package/dist/client/cron.d.ts +59 -0
  15. package/dist/client/cron.d.ts.map +1 -0
  16. package/dist/client/cron.js +82 -0
  17. package/dist/client/cron.js.map +1 -0
  18. package/dist/client/dlq.d.ts +52 -0
  19. package/dist/client/dlq.d.ts.map +1 -0
  20. package/dist/client/dlq.js +73 -0
  21. package/dist/client/dlq.js.map +1 -0
  22. package/dist/client/flows.d.ts +49 -0
  23. package/dist/client/flows.d.ts.map +1 -0
  24. package/dist/client/flows.js +67 -0
  25. package/dist/client/flows.js.map +1 -0
  26. package/dist/client/index.d.ts +644 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +829 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/client/jobs.d.ts +183 -0
  31. package/dist/client/jobs.d.ts.map +1 -0
  32. package/dist/client/jobs.js +272 -0
  33. package/dist/client/jobs.js.map +1 -0
  34. package/dist/client/kv.d.ts +63 -0
  35. package/dist/client/kv.d.ts.map +1 -0
  36. package/dist/client/kv.js +131 -0
  37. package/dist/client/kv.js.map +1 -0
  38. package/dist/client/metrics.d.ts +34 -0
  39. package/dist/client/metrics.d.ts.map +1 -0
  40. package/dist/client/metrics.js +49 -0
  41. package/dist/client/metrics.js.map +1 -0
  42. package/dist/client/pubsub.d.ts +42 -0
  43. package/dist/client/pubsub.d.ts.map +1 -0
  44. package/dist/client/pubsub.js +92 -0
  45. package/dist/client/pubsub.js.map +1 -0
  46. package/dist/client/queue.d.ts +111 -0
  47. package/dist/client/queue.d.ts.map +1 -0
  48. package/dist/client/queue.js +160 -0
  49. package/dist/client/queue.js.map +1 -0
  50. package/dist/client/types.d.ts +23 -0
  51. package/dist/client/types.d.ts.map +1 -0
  52. package/dist/client/types.js +3 -0
  53. package/dist/client/types.js.map +1 -0
  54. package/dist/client.d.ts +17 -0
  55. package/dist/client.d.ts.map +1 -0
  56. package/dist/client.js +23 -0
  57. package/dist/client.js.map +1 -0
  58. package/dist/events.d.ts +184 -0
  59. package/dist/events.d.ts.map +1 -0
  60. package/dist/events.js +340 -0
  61. package/dist/events.js.map +1 -0
  62. package/dist/index.d.ts +30 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +43 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/queue.d.ts +104 -0
  67. package/dist/queue.d.ts.map +1 -0
  68. package/dist/queue.js +139 -0
  69. package/dist/queue.js.map +1 -0
  70. package/dist/types.d.ts +185 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +6 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/worker.d.ts +88 -0
  75. package/dist/worker.d.ts.map +1 -0
  76. package/dist/worker.js +296 -0
  77. package/dist/worker.js.map +1 -0
  78. package/package.json +70 -0
@@ -0,0 +1,104 @@
1
+ import type { Job, ClientOptions } from './types';
2
+ export interface QueueOptions extends ClientOptions {
3
+ /** Default job options for all jobs in this queue */
4
+ defaultJobOptions?: JobOptions;
5
+ }
6
+ export interface JobOptions {
7
+ /** Job priority (higher = first) */
8
+ priority?: number;
9
+ /** Delay in ms */
10
+ delay?: number;
11
+ /** Number of retry attempts (BullMQ-compatible alias for max_attempts) */
12
+ attempts?: number;
13
+ /** Backoff configuration */
14
+ backoff?: number | {
15
+ type: 'exponential' | 'fixed';
16
+ delay: number;
17
+ };
18
+ /** Job timeout in ms */
19
+ timeout?: number;
20
+ /** Time-to-live in ms */
21
+ ttl?: number;
22
+ /** Unique key for deduplication */
23
+ jobId?: string;
24
+ /** Remove job on completion */
25
+ removeOnComplete?: boolean | number;
26
+ /** Remove job on failure */
27
+ removeOnFail?: boolean | number;
28
+ }
29
+ /**
30
+ * BullMQ-compatible Queue class
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * import { Queue } from 'flashq';
35
+ *
36
+ * const emailQueue = new Queue('emails');
37
+ *
38
+ * await emailQueue.add('send', { to: 'user@example.com' }, {
39
+ * attempts: 3,
40
+ * backoff: { type: 'exponential', delay: 1000 }
41
+ * });
42
+ * ```
43
+ */
44
+ export declare class Queue<T = unknown> {
45
+ private client;
46
+ private defaultJobOptions;
47
+ readonly name: string;
48
+ constructor(name: string, options?: QueueOptions);
49
+ /**
50
+ * Add a job to the queue (BullMQ-compatible)
51
+ */
52
+ add(name: string, data: T, options?: JobOptions): Promise<Job<T>>;
53
+ /**
54
+ * Add multiple jobs (BullMQ-compatible)
55
+ */
56
+ addBulk(jobs: Array<{
57
+ name: string;
58
+ data: T;
59
+ opts?: JobOptions;
60
+ }>): Promise<Job<T>[]>;
61
+ /**
62
+ * Get a job by ID
63
+ */
64
+ getJob(jobId: number): Promise<Job<T> | null>;
65
+ /**
66
+ * Pause the queue
67
+ */
68
+ pause(): Promise<void>;
69
+ /**
70
+ * Resume the queue
71
+ */
72
+ resume(): Promise<void>;
73
+ /**
74
+ * Check if queue is paused
75
+ */
76
+ isPaused(): Promise<boolean>;
77
+ /**
78
+ * Get job counts by state
79
+ */
80
+ getJobCounts(): Promise<{
81
+ waiting: number;
82
+ active: number;
83
+ completed: number;
84
+ failed: number;
85
+ delayed: number;
86
+ }>;
87
+ /**
88
+ * Drain the queue (remove all waiting jobs)
89
+ */
90
+ drain(): Promise<void>;
91
+ /**
92
+ * Obliterate the queue (remove all data)
93
+ */
94
+ obliterate(): Promise<void>;
95
+ /**
96
+ * Clean jobs by state and age
97
+ */
98
+ clean(grace: number, limit: number, type: 'completed' | 'failed' | 'delayed' | 'waiting'): Promise<number[]>;
99
+ /**
100
+ * Close the queue connection
101
+ */
102
+ close(): Promise<void>;
103
+ }
104
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAe,aAAa,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACjC;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAa;IAEtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IAMpD;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAyB3E;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAuB3F;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAKnD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAIF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKlH;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
package/dist/queue.js ADDED
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Queue = void 0;
4
+ /**
5
+ * BullMQ-compatible Queue class
6
+ */
7
+ const client_1 = require("./client");
8
+ /**
9
+ * BullMQ-compatible Queue class
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { Queue } from 'flashq';
14
+ *
15
+ * const emailQueue = new Queue('emails');
16
+ *
17
+ * await emailQueue.add('send', { to: 'user@example.com' }, {
18
+ * attempts: 3,
19
+ * backoff: { type: 'exponential', delay: 1000 }
20
+ * });
21
+ * ```
22
+ */
23
+ class Queue {
24
+ client;
25
+ defaultJobOptions;
26
+ name;
27
+ constructor(name, options = {}) {
28
+ this.name = name;
29
+ this.client = new client_1.FlashQ(options);
30
+ this.defaultJobOptions = options.defaultJobOptions || {};
31
+ }
32
+ /**
33
+ * Add a job to the queue (BullMQ-compatible)
34
+ */
35
+ async add(name, data, options = {}) {
36
+ const opts = { ...this.defaultJobOptions, ...options };
37
+ // Convert BullMQ options to flashQ options
38
+ const pushOpts = {
39
+ priority: opts.priority,
40
+ delay: opts.delay,
41
+ max_attempts: opts.attempts,
42
+ timeout: opts.timeout,
43
+ ttl: opts.ttl,
44
+ jobId: opts.jobId,
45
+ };
46
+ // Handle backoff (BullMQ uses object, flashQ uses number)
47
+ if (opts.backoff) {
48
+ if (typeof opts.backoff === 'number') {
49
+ pushOpts.backoff = opts.backoff;
50
+ }
51
+ else {
52
+ pushOpts.backoff = opts.backoff.delay;
53
+ }
54
+ }
55
+ return this.client.add(this.name, { name, ...data }, pushOpts);
56
+ }
57
+ /**
58
+ * Add multiple jobs (BullMQ-compatible)
59
+ */
60
+ async addBulk(jobs) {
61
+ const flashqJobs = jobs.map(job => {
62
+ const opts = { ...this.defaultJobOptions, ...job.opts };
63
+ return {
64
+ data: { name: job.name, ...job.data },
65
+ priority: opts.priority,
66
+ delay: opts.delay,
67
+ max_attempts: opts.attempts,
68
+ timeout: opts.timeout,
69
+ ttl: opts.ttl,
70
+ jobId: opts.jobId,
71
+ backoff: typeof opts.backoff === 'number' ? opts.backoff : opts.backoff?.delay,
72
+ };
73
+ });
74
+ const ids = await this.client.addBulk(this.name, flashqJobs);
75
+ return ids.map((id, i) => ({
76
+ id,
77
+ queue: this.name,
78
+ data: jobs[i].data,
79
+ }));
80
+ }
81
+ /**
82
+ * Get a job by ID
83
+ */
84
+ async getJob(jobId) {
85
+ const result = await this.client.getJob(jobId);
86
+ return result?.job;
87
+ }
88
+ /**
89
+ * Pause the queue
90
+ */
91
+ async pause() {
92
+ await this.client.pause(this.name);
93
+ }
94
+ /**
95
+ * Resume the queue
96
+ */
97
+ async resume() {
98
+ await this.client.resume(this.name);
99
+ }
100
+ /**
101
+ * Check if queue is paused
102
+ */
103
+ async isPaused() {
104
+ return this.client.isPaused(this.name);
105
+ }
106
+ /**
107
+ * Get job counts by state
108
+ */
109
+ async getJobCounts() {
110
+ return this.client.getJobCounts(this.name);
111
+ }
112
+ /**
113
+ * Drain the queue (remove all waiting jobs)
114
+ */
115
+ async drain() {
116
+ await this.client.drain(this.name);
117
+ }
118
+ /**
119
+ * Obliterate the queue (remove all data)
120
+ */
121
+ async obliterate() {
122
+ await this.client.obliterate(this.name);
123
+ }
124
+ /**
125
+ * Clean jobs by state and age
126
+ */
127
+ async clean(grace, limit, type) {
128
+ const count = await this.client.clean(this.name, grace, type, limit);
129
+ return Array(count).fill(0);
130
+ }
131
+ /**
132
+ * Close the queue connection
133
+ */
134
+ async close() {
135
+ await this.client.close();
136
+ }
137
+ }
138
+ exports.Queue = Queue;
139
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * flashQ TypeScript SDK Types
3
+ */
4
+ export interface Job<T = unknown> {
5
+ id: number;
6
+ queue: string;
7
+ data: T;
8
+ priority: number;
9
+ attempts: number;
10
+ created_at: number;
11
+ run_at: number;
12
+ started_at: number;
13
+ max_attempts: number;
14
+ backoff: number;
15
+ ttl: number;
16
+ timeout: number;
17
+ progress: number;
18
+ unique_key?: string;
19
+ custom_id?: string;
20
+ tags: string[];
21
+ depends_on: number[];
22
+ parent_id?: number;
23
+ children_ids: number[];
24
+ children_completed: number;
25
+ lifo: boolean;
26
+ remove_on_complete: boolean;
27
+ remove_on_fail: boolean;
28
+ last_heartbeat: number;
29
+ stall_timeout: number;
30
+ stall_count: number;
31
+ keep_completed_age: number;
32
+ keep_completed_count: number;
33
+ completed_at: number;
34
+ }
35
+ export type JobState = 'waiting' | 'delayed' | 'active' | 'completed' | 'failed';
36
+ export interface JobWithState<T = unknown> {
37
+ job: Job<T>;
38
+ state: JobState;
39
+ }
40
+ export interface PushOptions {
41
+ /** Higher = processed first (default: 0) */
42
+ priority?: number;
43
+ /** Delay in ms before job is available */
44
+ delay?: number;
45
+ /** Max retry attempts (default: 0 = no retry) */
46
+ max_attempts?: number;
47
+ /** Backoff base in ms (exponential: backoff * 2^attempt) */
48
+ backoff?: number;
49
+ /** Job timeout in ms */
50
+ timeout?: number;
51
+ /** Time-to-live in ms (job expires after) */
52
+ ttl?: number;
53
+ /** Unique key for deduplication */
54
+ unique_key?: string;
55
+ /** Custom ID for lookup */
56
+ jobId?: string;
57
+ /** Job IDs that must complete first */
58
+ depends_on?: number[];
59
+ /** Tags for filtering */
60
+ tags?: string[];
61
+ /** LIFO mode (stack) */
62
+ lifo?: boolean;
63
+ /** Remove from completed set immediately */
64
+ remove_on_complete?: boolean;
65
+ /** Remove from DLQ immediately */
66
+ remove_on_fail?: boolean;
67
+ /** Stall detection timeout in ms */
68
+ stall_timeout?: number;
69
+ /** Debounce ID for grouping */
70
+ debounce_id?: string;
71
+ /** Debounce window in ms */
72
+ debounce_ttl?: number;
73
+ /** Keep completed job result for this duration (ms) */
74
+ keepCompletedAge?: number;
75
+ /** Keep completed job in last N completed */
76
+ keepCompletedCount?: number;
77
+ }
78
+ export interface WorkerOptions {
79
+ /** Worker ID */
80
+ id?: string;
81
+ /** Parallel job processing (default: 10) */
82
+ concurrency?: number;
83
+ /** Jobs per batch (default: 100) */
84
+ batchSize?: number;
85
+ /** Heartbeat interval in ms (default: 1000) */
86
+ heartbeatInterval?: number;
87
+ /** Auto-ack on success (default: true) */
88
+ autoAck?: boolean;
89
+ }
90
+ export interface ClientOptions {
91
+ /** Server host (default: localhost) */
92
+ host?: string;
93
+ /** TCP port (default: 6789) */
94
+ port?: number;
95
+ /** HTTP port (default: 6790) */
96
+ httpPort?: number;
97
+ /** Unix socket path (alternative to TCP) */
98
+ socketPath?: string;
99
+ /** Auth token */
100
+ token?: string;
101
+ /** Connection timeout in ms (default: 5000) */
102
+ timeout?: number;
103
+ /** Use HTTP instead of TCP */
104
+ useHttp?: boolean;
105
+ /** Use binary (MessagePack) protocol */
106
+ useBinary?: boolean;
107
+ /** Enable auto-reconnect on connection loss (default: true) */
108
+ autoReconnect?: boolean;
109
+ /** Max reconnect attempts (default: 10, 0 = infinite) */
110
+ maxReconnectAttempts?: number;
111
+ /** Initial reconnect delay in ms (default: 1000) */
112
+ reconnectDelay?: number;
113
+ /** Max reconnect delay in ms (default: 30000) */
114
+ maxReconnectDelay?: number;
115
+ }
116
+ export interface QueueInfo {
117
+ name: string;
118
+ pending: number;
119
+ processing: number;
120
+ dlq: number;
121
+ paused: boolean;
122
+ }
123
+ export interface QueueStats {
124
+ queued: number;
125
+ processing: number;
126
+ delayed: number;
127
+ dlq: number;
128
+ }
129
+ export interface CronOptions {
130
+ queue: string;
131
+ data: unknown;
132
+ /** Cron expression: "sec min hour day month weekday" */
133
+ schedule?: string;
134
+ /** Or repeat every N ms */
135
+ repeat_every?: number;
136
+ priority?: number;
137
+ limit?: number;
138
+ }
139
+ export interface CronJob {
140
+ name: string;
141
+ queue: string;
142
+ data: unknown;
143
+ schedule?: string;
144
+ repeat_every?: number;
145
+ priority: number;
146
+ next_run: number;
147
+ executions: number;
148
+ limit?: number;
149
+ }
150
+ export interface Metrics {
151
+ total_pushed: number;
152
+ total_completed: number;
153
+ total_failed: number;
154
+ jobs_per_second: number;
155
+ avg_latency_ms: number;
156
+ queues: QueueMetrics[];
157
+ }
158
+ export interface QueueMetrics {
159
+ name: string;
160
+ pending: number;
161
+ processing: number;
162
+ dlq: number;
163
+ }
164
+ export interface FlowChild {
165
+ queue: string;
166
+ data: unknown;
167
+ priority?: number;
168
+ delay?: number;
169
+ }
170
+ export interface FlowResult {
171
+ parent_id: number;
172
+ children_ids: number[];
173
+ }
174
+ export interface JobLogEntry {
175
+ timestamp: number;
176
+ message: string;
177
+ level: 'info' | 'warn' | 'error';
178
+ }
179
+ export interface ApiResponse<T = unknown> {
180
+ ok: boolean;
181
+ data?: T;
182
+ error?: string;
183
+ }
184
+ export type JobProcessor<T = unknown, R = unknown> = (job: Job<T>) => R | Promise<R>;
185
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * flashQ TypeScript SDK Types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,88 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { JobProcessor, WorkerOptions, ClientOptions } from './types';
3
+ export interface BullMQWorkerOptions extends WorkerOptions, ClientOptions {
4
+ /** Auto-start worker (BullMQ-compatible, default: true) */
5
+ autorun?: boolean;
6
+ }
7
+ type WorkerState = 'idle' | 'starting' | 'running' | 'stopping' | 'stopped';
8
+ /**
9
+ * FlashQ Worker (BullMQ-compatible)
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // BullMQ-style: auto-starts by default
14
+ * const worker = new Worker('emails', async (job) => {
15
+ * await sendEmail(job.data.to);
16
+ * return { sent: true };
17
+ * });
18
+ *
19
+ * // With options
20
+ * const worker = new Worker('tasks', processor, {
21
+ * concurrency: 10,
22
+ * autorun: false, // disable auto-start
23
+ * });
24
+ * await worker.start();
25
+ *
26
+ * // Graceful shutdown
27
+ * process.on('SIGTERM', () => worker.close());
28
+ * ```
29
+ */
30
+ export declare class Worker<T = unknown, R = unknown> extends EventEmitter {
31
+ private clients;
32
+ private clientOptions;
33
+ private queues;
34
+ private processor;
35
+ private options;
36
+ private state;
37
+ private processing;
38
+ private jobsProcessed;
39
+ private workers;
40
+ private heartbeatTimer?;
41
+ private startPromise;
42
+ private stopPromise;
43
+ constructor(queues: string | string[], processor: JobProcessor<T, R>, options?: BullMQWorkerOptions);
44
+ /**
45
+ * Start processing jobs
46
+ */
47
+ start(): Promise<void>;
48
+ private doStart;
49
+ /**
50
+ * Close the worker (BullMQ-compatible alias for stop)
51
+ */
52
+ close(): Promise<void>;
53
+ /**
54
+ * Stop processing jobs (graceful shutdown)
55
+ */
56
+ stop(): Promise<void>;
57
+ private doStop;
58
+ /**
59
+ * Check if worker is running
60
+ */
61
+ isRunning(): boolean;
62
+ /**
63
+ * Get current worker state
64
+ */
65
+ getState(): WorkerState;
66
+ /**
67
+ * Get number of jobs currently being processed
68
+ */
69
+ getProcessingCount(): number;
70
+ /**
71
+ * Get total number of jobs processed by this worker
72
+ */
73
+ getJobsProcessed(): number;
74
+ /**
75
+ * Batch worker loop - pulls and processes jobs in batches for maximum throughput
76
+ */
77
+ private batchWorkerLoop;
78
+ private processJob;
79
+ private startHeartbeat;
80
+ private sleep;
81
+ /**
82
+ * Update progress for the current job
83
+ * (Use this within your processor function)
84
+ */
85
+ updateProgress(jobId: number, progress: number, message?: string): Promise<void>;
86
+ }
87
+ export default Worker;
88
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAEV,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,mBAAoB,SAAQ,aAAa,EAAE,aAAa;IACvE,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY;IAChE,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAiD;IAChE,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,WAAW,CAA8B;gBAG/C,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAC7B,OAAO,GAAE,mBAAwB;IA4BnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAyBd,OAAO;IAoBrB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA2Bb,MAAM;IAoBpB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;YACW,eAAe;YAqFf,UAAU;IAIxB,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,KAAK;IAIb;;;OAGG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKvF;AAED,eAAe,MAAM,CAAC"}