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
package/dist/worker.js ADDED
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Worker = void 0;
4
+ const events_1 = require("events");
5
+ const client_1 = require("./client");
6
+ /**
7
+ * FlashQ Worker (BullMQ-compatible)
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // BullMQ-style: auto-starts by default
12
+ * const worker = new Worker('emails', async (job) => {
13
+ * await sendEmail(job.data.to);
14
+ * return { sent: true };
15
+ * });
16
+ *
17
+ * // With options
18
+ * const worker = new Worker('tasks', processor, {
19
+ * concurrency: 10,
20
+ * autorun: false, // disable auto-start
21
+ * });
22
+ * await worker.start();
23
+ *
24
+ * // Graceful shutdown
25
+ * process.on('SIGTERM', () => worker.close());
26
+ * ```
27
+ */
28
+ class Worker extends events_1.EventEmitter {
29
+ clients = [];
30
+ clientOptions;
31
+ queues;
32
+ processor;
33
+ options;
34
+ state = 'idle';
35
+ processing = 0;
36
+ jobsProcessed = 0;
37
+ workers = [];
38
+ heartbeatTimer;
39
+ startPromise = null;
40
+ stopPromise = null;
41
+ constructor(queues, processor, options = {}) {
42
+ super();
43
+ this.queues = Array.isArray(queues) ? queues : [queues];
44
+ this.processor = processor;
45
+ this.options = {
46
+ id: options.id ?? `worker-${Date.now()}-${Math.random().toString(36).slice(2)}`,
47
+ concurrency: options.concurrency ?? 10,
48
+ batchSize: options.batchSize ?? 100,
49
+ heartbeatInterval: options.heartbeatInterval ?? 1000,
50
+ autoAck: options.autoAck ?? true,
51
+ autorun: options.autorun ?? true, // BullMQ-compatible: auto-start
52
+ };
53
+ this.clientOptions = {
54
+ host: options.host,
55
+ port: options.port,
56
+ httpPort: options.httpPort,
57
+ token: options.token,
58
+ timeout: options.timeout,
59
+ };
60
+ // Auto-start if enabled (BullMQ-compatible)
61
+ if (this.options.autorun) {
62
+ this.start();
63
+ }
64
+ }
65
+ /**
66
+ * Start processing jobs
67
+ */
68
+ async start() {
69
+ // Return existing promise if already starting
70
+ if (this.state === 'starting' && this.startPromise) {
71
+ return this.startPromise;
72
+ }
73
+ // Already running or stopped
74
+ if (this.state === 'running') {
75
+ return;
76
+ }
77
+ if (this.state === 'stopping' || this.state === 'stopped') {
78
+ throw new Error('Cannot start a stopped worker. Create a new Worker instance.');
79
+ }
80
+ this.state = 'starting';
81
+ this.startPromise = this.doStart();
82
+ try {
83
+ await this.startPromise;
84
+ }
85
+ finally {
86
+ this.startPromise = null;
87
+ }
88
+ }
89
+ async doStart() {
90
+ // Create a separate client for each worker (TCP pull is blocking)
91
+ for (let i = 0; i < this.options.concurrency; i++) {
92
+ const client = new client_1.FlashQ(this.clientOptions);
93
+ await client.connect();
94
+ this.clients.push(client);
95
+ }
96
+ this.state = 'running';
97
+ this.emit('ready');
98
+ // Start heartbeat
99
+ this.startHeartbeat();
100
+ // Start worker loops (each with its own client)
101
+ for (let i = 0; i < this.options.concurrency; i++) {
102
+ this.workers.push(this.batchWorkerLoop(i, this.clients[i]));
103
+ }
104
+ }
105
+ /**
106
+ * Close the worker (BullMQ-compatible alias for stop)
107
+ */
108
+ async close() {
109
+ return this.stop();
110
+ }
111
+ /**
112
+ * Stop processing jobs (graceful shutdown)
113
+ */
114
+ async stop() {
115
+ // Wait for starting to complete first
116
+ if (this.state === 'starting' && this.startPromise) {
117
+ await this.startPromise;
118
+ }
119
+ // Return existing promise if already stopping
120
+ if (this.state === 'stopping' && this.stopPromise) {
121
+ return this.stopPromise;
122
+ }
123
+ // Already stopped or never started
124
+ if (this.state === 'stopped' || this.state === 'idle') {
125
+ return;
126
+ }
127
+ this.state = 'stopping';
128
+ this.emit('stopping');
129
+ this.stopPromise = this.doStop();
130
+ try {
131
+ await this.stopPromise;
132
+ }
133
+ finally {
134
+ this.stopPromise = null;
135
+ }
136
+ }
137
+ async doStop() {
138
+ // Stop heartbeat
139
+ if (this.heartbeatTimer) {
140
+ clearInterval(this.heartbeatTimer);
141
+ this.heartbeatTimer = undefined;
142
+ }
143
+ // Wait for current jobs to finish
144
+ await Promise.all(this.workers);
145
+ this.workers = [];
146
+ // Close all clients
147
+ const clientsToClose = [...this.clients];
148
+ this.clients = [];
149
+ await Promise.all(clientsToClose.map((c) => c.close()));
150
+ this.state = 'stopped';
151
+ this.emit('stopped');
152
+ }
153
+ /**
154
+ * Check if worker is running
155
+ */
156
+ isRunning() {
157
+ return this.state === 'running';
158
+ }
159
+ /**
160
+ * Get current worker state
161
+ */
162
+ getState() {
163
+ return this.state;
164
+ }
165
+ /**
166
+ * Get number of jobs currently being processed
167
+ */
168
+ getProcessingCount() {
169
+ return this.processing;
170
+ }
171
+ /**
172
+ * Get total number of jobs processed by this worker
173
+ */
174
+ getJobsProcessed() {
175
+ return this.jobsProcessed;
176
+ }
177
+ /**
178
+ * Batch worker loop - pulls and processes jobs in batches for maximum throughput
179
+ */
180
+ async batchWorkerLoop(workerId, client) {
181
+ const batchSize = this.options.batchSize;
182
+ while (this.state === 'running') {
183
+ for (const queue of this.queues) {
184
+ if (this.state !== 'running')
185
+ break;
186
+ try {
187
+ // Batch pull with SHORT timeout (500ms) for responsive shutdown
188
+ const jobs = await client.pullBatch(queue, batchSize, 500);
189
+ // No jobs available - continue polling
190
+ if (!jobs || jobs.length === 0) {
191
+ continue;
192
+ }
193
+ this.processing += jobs.length;
194
+ // Track successful and failed jobs
195
+ const successJobs = [];
196
+ const failedJobs = [];
197
+ // Process all jobs in parallel
198
+ await Promise.all(jobs.map(async (job) => {
199
+ this.emit('active', job, workerId);
200
+ try {
201
+ const result = await this.processJob(job);
202
+ successJobs.push({ job, result });
203
+ }
204
+ catch (error) {
205
+ const errorMessage = error instanceof Error ? error.message : String(error);
206
+ failedJobs.push({ job, error: errorMessage });
207
+ }
208
+ }));
209
+ // Batch ack successful jobs - THEN emit completed
210
+ if (this.options.autoAck && successJobs.length > 0) {
211
+ await client.ackBatch(successJobs.map((j) => j.job.id));
212
+ // Emit completed AFTER ack succeeds
213
+ for (const { job, result } of successJobs) {
214
+ this.jobsProcessed++;
215
+ this.emit('completed', job, result, workerId);
216
+ }
217
+ }
218
+ else if (!this.options.autoAck && successJobs.length > 0) {
219
+ // If autoAck is disabled, emit completed after processing
220
+ for (const { job, result } of successJobs) {
221
+ this.jobsProcessed++;
222
+ this.emit('completed', job, result, workerId);
223
+ }
224
+ }
225
+ // Fail individual jobs that errored - THEN emit failed
226
+ if (this.options.autoAck && failedJobs.length > 0) {
227
+ await Promise.all(failedJobs.map(async ({ job, error }) => {
228
+ await client.fail(job.id, error);
229
+ this.emit('failed', job, new Error(error), workerId);
230
+ }));
231
+ }
232
+ else if (!this.options.autoAck && failedJobs.length > 0) {
233
+ for (const { job, error } of failedJobs) {
234
+ this.emit('failed', job, new Error(error), workerId);
235
+ }
236
+ }
237
+ this.processing -= jobs.length;
238
+ }
239
+ catch (error) {
240
+ // Timeout is expected when no jobs available - not an error
241
+ const errorMsg = error instanceof Error ? error.message : String(error);
242
+ if (errorMsg.includes('timeout') || errorMsg.includes('Timeout')) {
243
+ // Normal - no jobs available, retry
244
+ continue;
245
+ }
246
+ // Connection error - wait before retry
247
+ if (this.state === 'running') {
248
+ this.emit('error', error);
249
+ await this.sleep(1000);
250
+ }
251
+ }
252
+ }
253
+ }
254
+ }
255
+ async processJob(job) {
256
+ return this.processor(job);
257
+ }
258
+ startHeartbeat() {
259
+ const sendHeartbeat = async () => {
260
+ if (this.state !== 'running')
261
+ return;
262
+ try {
263
+ const url = `http://${this.clientOptions.host ?? 'localhost'}:${this.clientOptions.httpPort ?? 6790}/workers/${this.options.id}/heartbeat`;
264
+ await fetch(url, {
265
+ method: 'POST',
266
+ headers: { 'Content-Type': 'application/json' },
267
+ body: JSON.stringify({
268
+ queues: this.queues,
269
+ concurrency: this.options.concurrency,
270
+ jobs_processed: this.jobsProcessed,
271
+ }),
272
+ });
273
+ }
274
+ catch {
275
+ // Ignore heartbeat errors (HTTP may not be available)
276
+ }
277
+ };
278
+ this.heartbeatTimer = setInterval(sendHeartbeat, this.options.heartbeatInterval);
279
+ sendHeartbeat();
280
+ }
281
+ sleep(ms) {
282
+ return new Promise((resolve) => setTimeout(resolve, ms));
283
+ }
284
+ /**
285
+ * Update progress for the current job
286
+ * (Use this within your processor function)
287
+ */
288
+ async updateProgress(jobId, progress, message) {
289
+ if (this.clients.length > 0) {
290
+ await this.clients[0].progress(jobId, progress, message);
291
+ }
292
+ }
293
+ }
294
+ exports.Worker = Worker;
295
+ exports.default = Worker;
296
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "flashq",
3
+ "version": "0.1.0",
4
+ "description": "Official TypeScript SDK for flashQ - High-Performance Job Queue (BullMQ-compatible API)",
5
+ "author": "Ege Ominotti",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/egeominotti/flashq",
8
+ "bugs": {
9
+ "url": "https://github.com/egeominotti/flashq/issues"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/egeominotti/flashq.git",
14
+ "directory": "sdk/typescript"
15
+ },
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "require": "./dist/index.js",
22
+ "import": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "engines": {
29
+ "node": ">=18.0.0"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc",
33
+ "typecheck": "tsc --noEmit",
34
+ "test": "bun test",
35
+ "clean": "rm -rf dist",
36
+ "prepublishOnly": "npm run clean && npm run build"
37
+ },
38
+ "keywords": [
39
+ "queue",
40
+ "job-queue",
41
+ "task-queue",
42
+ "background-jobs",
43
+ "worker",
44
+ "bullmq",
45
+ "bullmq-compatible",
46
+ "flashq",
47
+ "high-performance",
48
+ "rust",
49
+ "bun",
50
+ "nodejs"
51
+ ],
52
+ "dependencies": {
53
+ "@msgpack/msgpack": "^3.0.0"
54
+ },
55
+ "devDependencies": {
56
+ "typescript": "^5.0.0"
57
+ },
58
+ "peerDependencies": {
59
+ "@grpc/grpc-js": ">=1.9.0",
60
+ "@grpc/proto-loader": ">=0.7.0"
61
+ },
62
+ "peerDependenciesMeta": {
63
+ "@grpc/grpc-js": {
64
+ "optional": true
65
+ },
66
+ "@grpc/proto-loader": {
67
+ "optional": true
68
+ }
69
+ }
70
+ }