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.
- package/README.md +283 -0
- package/dist/client/advanced.d.ts +174 -0
- package/dist/client/advanced.d.ts.map +1 -0
- package/dist/client/advanced.js +248 -0
- package/dist/client/advanced.js.map +1 -0
- package/dist/client/connection.d.ts +103 -0
- package/dist/client/connection.d.ts.map +1 -0
- package/dist/client/connection.js +570 -0
- package/dist/client/connection.js.map +1 -0
- package/dist/client/core.d.ts +119 -0
- package/dist/client/core.d.ts.map +1 -0
- package/dist/client/core.js +257 -0
- package/dist/client/core.js.map +1 -0
- package/dist/client/cron.d.ts +59 -0
- package/dist/client/cron.d.ts.map +1 -0
- package/dist/client/cron.js +82 -0
- package/dist/client/cron.js.map +1 -0
- package/dist/client/dlq.d.ts +52 -0
- package/dist/client/dlq.d.ts.map +1 -0
- package/dist/client/dlq.js +73 -0
- package/dist/client/dlq.js.map +1 -0
- package/dist/client/flows.d.ts +49 -0
- package/dist/client/flows.d.ts.map +1 -0
- package/dist/client/flows.js +67 -0
- package/dist/client/flows.js.map +1 -0
- package/dist/client/index.d.ts +644 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +829 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/jobs.d.ts +183 -0
- package/dist/client/jobs.d.ts.map +1 -0
- package/dist/client/jobs.js +272 -0
- package/dist/client/jobs.js.map +1 -0
- package/dist/client/kv.d.ts +63 -0
- package/dist/client/kv.d.ts.map +1 -0
- package/dist/client/kv.js +131 -0
- package/dist/client/kv.js.map +1 -0
- package/dist/client/metrics.d.ts +34 -0
- package/dist/client/metrics.d.ts.map +1 -0
- package/dist/client/metrics.js +49 -0
- package/dist/client/metrics.js.map +1 -0
- package/dist/client/pubsub.d.ts +42 -0
- package/dist/client/pubsub.d.ts.map +1 -0
- package/dist/client/pubsub.js +92 -0
- package/dist/client/pubsub.js.map +1 -0
- package/dist/client/queue.d.ts +111 -0
- package/dist/client/queue.d.ts.map +1 -0
- package/dist/client/queue.js +160 -0
- package/dist/client/queue.js.map +1 -0
- package/dist/client/types.d.ts +23 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +3 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +23 -0
- package/dist/client.js.map +1 -0
- package/dist/events.d.ts +184 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +340 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/queue.d.ts +104 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +139 -0
- package/dist/queue.js.map +1 -0
- package/dist/types.d.ts +185 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +88 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +296 -0
- package/dist/worker.js.map +1 -0
- 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
|
+
}
|