bunqueue 1.6.8 → 1.7.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/dist/application/queueManager.js +2 -2
- package/dist/application/queueManager.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/queue.d.ts +25 -4
- package/dist/client/queue.d.ts.map +1 -1
- package/dist/client/queue.js +290 -40
- package/dist/client/queue.js.map +1 -1
- package/dist/client/tcpClient.d.ts +63 -0
- package/dist/client/tcpClient.d.ts.map +1 -0
- package/dist/client/tcpClient.js +334 -0
- package/dist/client/tcpClient.js.map +1 -0
- package/dist/client/tcpPool.d.ts +41 -0
- package/dist/client/tcpPool.d.ts.map +1 -0
- package/dist/client/tcpPool.js +110 -0
- package/dist/client/tcpPool.js.map +1 -0
- package/dist/client/types.d.ts +21 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/types.js.map +1 -1
- package/dist/client/worker.d.ts +27 -0
- package/dist/client/worker.d.ts.map +1 -1
- package/dist/client/worker.js +241 -14
- package/dist/client/worker.js.map +1 -1
- package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -1
- package/dist/infrastructure/backup/s3Backup.js +2 -1
- package/dist/infrastructure/backup/s3Backup.js.map +1 -1
- package/dist/infrastructure/server/http.d.ts.map +1 -1
- package/dist/infrastructure/server/http.js +2 -1
- package/dist/infrastructure/server/http.js.map +1 -1
- package/dist/infrastructure/server/rateLimiter.js +1 -1
- package/dist/infrastructure/server/rateLimiter.js.map +1 -1
- package/dist/mcp/index.js +2 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/version.d.ts.map +1 -1
- package/dist/shared/version.js +3 -27
- package/dist/shared/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TCP Client for SDK - Production Ready
|
|
3
|
+
* Connects to bunqueue server via TCP with auto-reconnection
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
/** Default connection */
|
|
7
|
+
export const DEFAULT_CONNECTION = {
|
|
8
|
+
host: 'localhost',
|
|
9
|
+
port: 6789,
|
|
10
|
+
token: '',
|
|
11
|
+
maxReconnectAttempts: Infinity,
|
|
12
|
+
reconnectDelay: 100,
|
|
13
|
+
maxReconnectDelay: 30000,
|
|
14
|
+
connectTimeout: 5000,
|
|
15
|
+
commandTimeout: 30000,
|
|
16
|
+
autoReconnect: true,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* TCP Client - manages connection to bunqueue server
|
|
20
|
+
* Production-ready with auto-reconnection and exponential backoff
|
|
21
|
+
*/
|
|
22
|
+
export class TcpClient extends EventEmitter {
|
|
23
|
+
socket = null;
|
|
24
|
+
connected = false;
|
|
25
|
+
connecting = false;
|
|
26
|
+
closed = false;
|
|
27
|
+
reconnectAttempts = 0;
|
|
28
|
+
reconnectTimer = null;
|
|
29
|
+
options;
|
|
30
|
+
pendingCommands = [];
|
|
31
|
+
currentCommand = null;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
super();
|
|
34
|
+
this.options = { ...DEFAULT_CONNECTION, ...options };
|
|
35
|
+
}
|
|
36
|
+
/** Connect to server */
|
|
37
|
+
async connect() {
|
|
38
|
+
if (this.connected)
|
|
39
|
+
return;
|
|
40
|
+
if (this.connecting) {
|
|
41
|
+
// Wait for current connection attempt
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const onConnect = () => {
|
|
44
|
+
this.off('error', onError);
|
|
45
|
+
resolve();
|
|
46
|
+
};
|
|
47
|
+
const onError = (err) => {
|
|
48
|
+
this.off('connected', onConnect);
|
|
49
|
+
reject(err);
|
|
50
|
+
};
|
|
51
|
+
this.once('connected', onConnect);
|
|
52
|
+
this.once('error', onError);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
this.connecting = true;
|
|
56
|
+
this.closed = false;
|
|
57
|
+
try {
|
|
58
|
+
await this.doConnect();
|
|
59
|
+
this.reconnectAttempts = 0;
|
|
60
|
+
this.emit('connected');
|
|
61
|
+
// Process any pending commands
|
|
62
|
+
this.processNextCommand();
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
this.connecting = false;
|
|
66
|
+
if (this.options.autoReconnect && !this.closed) {
|
|
67
|
+
this.scheduleReconnect();
|
|
68
|
+
}
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async doConnect() {
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
const socketData = {
|
|
75
|
+
write: () => { },
|
|
76
|
+
end: () => { },
|
|
77
|
+
buffer: '',
|
|
78
|
+
};
|
|
79
|
+
let connectionResolved = false;
|
|
80
|
+
let timeoutId = null;
|
|
81
|
+
const cleanup = () => {
|
|
82
|
+
if (timeoutId) {
|
|
83
|
+
clearTimeout(timeoutId);
|
|
84
|
+
timeoutId = null;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
void Bun.connect({
|
|
88
|
+
hostname: this.options.host,
|
|
89
|
+
port: this.options.port,
|
|
90
|
+
socket: {
|
|
91
|
+
data: (_sock, data) => {
|
|
92
|
+
socketData.buffer += data.toString();
|
|
93
|
+
let newlineIdx;
|
|
94
|
+
while ((newlineIdx = socketData.buffer.indexOf('\n')) !== -1) {
|
|
95
|
+
const line = socketData.buffer.slice(0, newlineIdx);
|
|
96
|
+
socketData.buffer = socketData.buffer.slice(newlineIdx + 1);
|
|
97
|
+
if (line.trim() && this.currentCommand) {
|
|
98
|
+
try {
|
|
99
|
+
const response = JSON.parse(line);
|
|
100
|
+
clearTimeout(this.currentCommand.timeout);
|
|
101
|
+
this.currentCommand.resolve(response);
|
|
102
|
+
this.currentCommand = null;
|
|
103
|
+
this.processNextCommand();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
if (this.currentCommand) {
|
|
107
|
+
clearTimeout(this.currentCommand.timeout);
|
|
108
|
+
this.currentCommand.reject(new Error('Invalid response from server'));
|
|
109
|
+
this.currentCommand = null;
|
|
110
|
+
this.processNextCommand();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
open: async (sock) => {
|
|
117
|
+
cleanup();
|
|
118
|
+
socketData.write = (data) => sock.write(data);
|
|
119
|
+
socketData.end = () => sock.end();
|
|
120
|
+
this.socket = socketData;
|
|
121
|
+
this.connected = true;
|
|
122
|
+
this.connecting = false;
|
|
123
|
+
// Authenticate if token provided
|
|
124
|
+
if (this.options.token) {
|
|
125
|
+
try {
|
|
126
|
+
const authResponse = await this.sendInternal({
|
|
127
|
+
cmd: 'Auth',
|
|
128
|
+
token: this.options.token,
|
|
129
|
+
});
|
|
130
|
+
if (!authResponse.ok) {
|
|
131
|
+
connectionResolved = true;
|
|
132
|
+
reject(new Error('Authentication failed'));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
connectionResolved = true;
|
|
138
|
+
reject(err);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
connectionResolved = true;
|
|
143
|
+
resolve();
|
|
144
|
+
},
|
|
145
|
+
close: () => {
|
|
146
|
+
const wasConnected = this.connected;
|
|
147
|
+
this.connected = false;
|
|
148
|
+
this.connecting = false;
|
|
149
|
+
this.socket = null;
|
|
150
|
+
// Reject current command
|
|
151
|
+
if (this.currentCommand) {
|
|
152
|
+
clearTimeout(this.currentCommand.timeout);
|
|
153
|
+
this.currentCommand.reject(new Error('Connection closed'));
|
|
154
|
+
this.currentCommand = null;
|
|
155
|
+
}
|
|
156
|
+
if (wasConnected) {
|
|
157
|
+
this.emit('disconnected');
|
|
158
|
+
if (this.options.autoReconnect && !this.closed) {
|
|
159
|
+
this.scheduleReconnect();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (!connectionResolved) {
|
|
163
|
+
connectionResolved = true;
|
|
164
|
+
cleanup();
|
|
165
|
+
reject(new Error('Connection closed'));
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
error: (_sock, error) => {
|
|
169
|
+
if (!connectionResolved) {
|
|
170
|
+
connectionResolved = true;
|
|
171
|
+
cleanup();
|
|
172
|
+
reject(new Error(`Connection error: ${error.message}`));
|
|
173
|
+
}
|
|
174
|
+
this.emit('error', error);
|
|
175
|
+
},
|
|
176
|
+
connectError: (_sock, error) => {
|
|
177
|
+
if (!connectionResolved) {
|
|
178
|
+
connectionResolved = true;
|
|
179
|
+
cleanup();
|
|
180
|
+
reject(new Error(`Failed to connect to ${this.options.host}:${this.options.port}: ${error.message}`));
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
// Connection timeout
|
|
186
|
+
timeoutId = setTimeout(() => {
|
|
187
|
+
if (!connectionResolved) {
|
|
188
|
+
connectionResolved = true;
|
|
189
|
+
reject(new Error(`Connection timeout to ${this.options.host}:${this.options.port}`));
|
|
190
|
+
}
|
|
191
|
+
}, this.options.connectTimeout);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/** Schedule reconnection with exponential backoff */
|
|
195
|
+
scheduleReconnect() {
|
|
196
|
+
if (this.reconnectTimer || this.closed)
|
|
197
|
+
return;
|
|
198
|
+
this.reconnectAttempts++;
|
|
199
|
+
if (this.reconnectAttempts > this.options.maxReconnectAttempts) {
|
|
200
|
+
this.emit('maxReconnectAttemptsReached');
|
|
201
|
+
// Reject all pending commands
|
|
202
|
+
for (const cmd of this.pendingCommands) {
|
|
203
|
+
clearTimeout(cmd.timeout);
|
|
204
|
+
cmd.reject(new Error('Max reconnection attempts reached'));
|
|
205
|
+
}
|
|
206
|
+
this.pendingCommands = [];
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// Exponential backoff with jitter
|
|
210
|
+
const baseDelay = Math.min(this.options.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1), this.options.maxReconnectDelay);
|
|
211
|
+
const jitter = Math.random() * 0.3 * baseDelay; // 0-30% jitter
|
|
212
|
+
const delay = baseDelay + jitter;
|
|
213
|
+
this.emit('reconnecting', { attempt: this.reconnectAttempts, delay });
|
|
214
|
+
this.reconnectTimer = setTimeout(async () => {
|
|
215
|
+
this.reconnectTimer = null;
|
|
216
|
+
try {
|
|
217
|
+
await this.connect();
|
|
218
|
+
// Process queued commands after reconnection
|
|
219
|
+
this.processNextCommand();
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// connect() will schedule another reconnect if needed
|
|
223
|
+
}
|
|
224
|
+
}, delay);
|
|
225
|
+
}
|
|
226
|
+
/** Internal send without auto-connect */
|
|
227
|
+
async sendInternal(command) {
|
|
228
|
+
if (!this.socket) {
|
|
229
|
+
throw new Error('Not connected');
|
|
230
|
+
}
|
|
231
|
+
return new Promise((resolve, reject) => {
|
|
232
|
+
const timeout = setTimeout(() => {
|
|
233
|
+
if (this.currentCommand?.command === command) {
|
|
234
|
+
this.currentCommand = null;
|
|
235
|
+
reject(new Error('Command timeout'));
|
|
236
|
+
this.processNextCommand();
|
|
237
|
+
}
|
|
238
|
+
}, this.options.commandTimeout);
|
|
239
|
+
this.currentCommand = { command, resolve, reject, timeout };
|
|
240
|
+
this.socket.write(JSON.stringify(command) + '\n');
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
/** Process next pending command */
|
|
244
|
+
processNextCommand() {
|
|
245
|
+
if (this.currentCommand || !this.connected || this.pendingCommands.length === 0) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const next = this.pendingCommands.shift();
|
|
249
|
+
this.currentCommand = next;
|
|
250
|
+
this.socket.write(JSON.stringify(next.command) + '\n');
|
|
251
|
+
}
|
|
252
|
+
/** Send command and wait for response */
|
|
253
|
+
async send(command) {
|
|
254
|
+
// If connected and no pending commands, send immediately
|
|
255
|
+
if (this.connected && this.pendingCommands.length === 0 && !this.currentCommand) {
|
|
256
|
+
return this.sendInternal(command);
|
|
257
|
+
}
|
|
258
|
+
// Otherwise queue the command
|
|
259
|
+
return new Promise((resolve, reject) => {
|
|
260
|
+
const timeout = setTimeout(() => {
|
|
261
|
+
const idx = this.pendingCommands.findIndex((c) => c.command === command);
|
|
262
|
+
if (idx !== -1) {
|
|
263
|
+
this.pendingCommands.splice(idx, 1);
|
|
264
|
+
reject(new Error('Command timeout'));
|
|
265
|
+
}
|
|
266
|
+
}, this.options.commandTimeout);
|
|
267
|
+
this.pendingCommands.push({ command, resolve, reject, timeout });
|
|
268
|
+
// Try to connect if not connected
|
|
269
|
+
if (!this.connected && !this.connecting) {
|
|
270
|
+
this.connect().catch(() => {
|
|
271
|
+
// Error handled by reconnect logic
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
else if (this.connected) {
|
|
275
|
+
this.processNextCommand();
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
/** Close connection */
|
|
280
|
+
close() {
|
|
281
|
+
this.closed = true;
|
|
282
|
+
if (this.reconnectTimer) {
|
|
283
|
+
clearTimeout(this.reconnectTimer);
|
|
284
|
+
this.reconnectTimer = null;
|
|
285
|
+
}
|
|
286
|
+
// Reject all pending commands
|
|
287
|
+
for (const cmd of this.pendingCommands) {
|
|
288
|
+
clearTimeout(cmd.timeout);
|
|
289
|
+
cmd.reject(new Error('Client closed'));
|
|
290
|
+
}
|
|
291
|
+
this.pendingCommands = [];
|
|
292
|
+
if (this.currentCommand) {
|
|
293
|
+
clearTimeout(this.currentCommand.timeout);
|
|
294
|
+
this.currentCommand.reject(new Error('Client closed'));
|
|
295
|
+
this.currentCommand = null;
|
|
296
|
+
}
|
|
297
|
+
if (this.socket) {
|
|
298
|
+
this.socket.end();
|
|
299
|
+
this.socket = null;
|
|
300
|
+
this.connected = false;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/** Check if connected */
|
|
304
|
+
isConnected() {
|
|
305
|
+
return this.connected;
|
|
306
|
+
}
|
|
307
|
+
/** Get connection state */
|
|
308
|
+
getState() {
|
|
309
|
+
if (this.closed)
|
|
310
|
+
return 'closed';
|
|
311
|
+
if (this.connected)
|
|
312
|
+
return 'connected';
|
|
313
|
+
if (this.connecting)
|
|
314
|
+
return 'connecting';
|
|
315
|
+
return 'disconnected';
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/** Shared client instance */
|
|
319
|
+
let sharedClient = null;
|
|
320
|
+
/** Get shared TCP client */
|
|
321
|
+
export function getSharedTcpClient(options) {
|
|
322
|
+
if (!sharedClient) {
|
|
323
|
+
sharedClient = new TcpClient(options);
|
|
324
|
+
}
|
|
325
|
+
return sharedClient;
|
|
326
|
+
}
|
|
327
|
+
/** Close shared client */
|
|
328
|
+
export function closeSharedTcpClient() {
|
|
329
|
+
if (sharedClient) {
|
|
330
|
+
sharedClient.close();
|
|
331
|
+
sharedClient = null;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=tcpClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcpClient.js","sourceRoot":"","sources":["../../src/client/tcpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TCP Connection Pool
|
|
3
|
+
* Manages multiple TCP connections for parallel operations
|
|
4
|
+
*/
|
|
5
|
+
import { type ConnectionOptions } from './tcpClient';
|
|
6
|
+
export interface PoolOptions extends Partial<ConnectionOptions> {
|
|
7
|
+
/** Number of connections in pool (default: 4) */
|
|
8
|
+
poolSize?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Connection pool for parallel TCP operations
|
|
12
|
+
* Round-robin distribution of commands across connections
|
|
13
|
+
*/
|
|
14
|
+
export declare class TcpConnectionPool {
|
|
15
|
+
private readonly clients;
|
|
16
|
+
private readonly options;
|
|
17
|
+
private currentIndex;
|
|
18
|
+
private closed;
|
|
19
|
+
constructor(options?: PoolOptions);
|
|
20
|
+
/** Connect all clients in pool */
|
|
21
|
+
connect(): Promise<void>;
|
|
22
|
+
/** Get next client (round-robin) */
|
|
23
|
+
private getNextClient;
|
|
24
|
+
/** Send command using next available connection */
|
|
25
|
+
send(command: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
26
|
+
/** Send multiple commands in parallel across pool */
|
|
27
|
+
sendParallel(commands: Array<Record<string, unknown>>): Promise<Array<Record<string, unknown>>>;
|
|
28
|
+
/** Check if any connection is ready */
|
|
29
|
+
isConnected(): boolean;
|
|
30
|
+
/** Get number of connected clients */
|
|
31
|
+
getConnectedCount(): number;
|
|
32
|
+
/** Get pool size */
|
|
33
|
+
getPoolSize(): number;
|
|
34
|
+
/** Close all connections */
|
|
35
|
+
close(): void;
|
|
36
|
+
}
|
|
37
|
+
/** Get or create shared connection pool */
|
|
38
|
+
export declare function getSharedPool(options?: PoolOptions): TcpConnectionPool;
|
|
39
|
+
/** Close shared pool */
|
|
40
|
+
export declare function closeSharedPool(): void;
|
|
41
|
+
//# sourceMappingURL=tcpPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcpPool.d.ts","sourceRoot":"","sources":["../../src/client/tcpPool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,iBAAiB,CAAC;IAC7D,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,WAAgB;IA+BrC,kCAAkC;IAC5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,oCAAoC;IACpC,OAAO,CAAC,aAAa;IAMrB,mDAAmD;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO9E,qDAAqD;IAC/C,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAcrG,uCAAuC;IACvC,WAAW,IAAI,OAAO;IAItB,sCAAsC;IACtC,iBAAiB,IAAI,MAAM;IAI3B,oBAAoB;IACpB,WAAW,IAAI,MAAM;IAIrB,4BAA4B;IAC5B,KAAK,IAAI,IAAI;CAOd;AAKD,2CAA2C;AAC3C,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAKtE;AAED,wBAAwB;AACxB,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TCP Connection Pool
|
|
3
|
+
* Manages multiple TCP connections for parallel operations
|
|
4
|
+
*/
|
|
5
|
+
import { TcpClient } from './tcpClient';
|
|
6
|
+
/**
|
|
7
|
+
* Connection pool for parallel TCP operations
|
|
8
|
+
* Round-robin distribution of commands across connections
|
|
9
|
+
*/
|
|
10
|
+
export class TcpConnectionPool {
|
|
11
|
+
clients = [];
|
|
12
|
+
options;
|
|
13
|
+
currentIndex = 0;
|
|
14
|
+
closed = false;
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
this.options = {
|
|
17
|
+
host: options.host ?? 'localhost',
|
|
18
|
+
port: options.port ?? 6789,
|
|
19
|
+
token: options.token ?? '',
|
|
20
|
+
poolSize: options.poolSize ?? 4,
|
|
21
|
+
maxReconnectAttempts: options.maxReconnectAttempts ?? Infinity,
|
|
22
|
+
reconnectDelay: options.reconnectDelay ?? 100,
|
|
23
|
+
maxReconnectDelay: options.maxReconnectDelay ?? 30000,
|
|
24
|
+
connectTimeout: options.connectTimeout ?? 5000,
|
|
25
|
+
commandTimeout: options.commandTimeout ?? 30000,
|
|
26
|
+
autoReconnect: options.autoReconnect ?? true,
|
|
27
|
+
};
|
|
28
|
+
// Create pool of connections
|
|
29
|
+
for (let i = 0; i < this.options.poolSize; i++) {
|
|
30
|
+
const client = new TcpClient({
|
|
31
|
+
host: this.options.host,
|
|
32
|
+
port: this.options.port,
|
|
33
|
+
token: this.options.token,
|
|
34
|
+
maxReconnectAttempts: this.options.maxReconnectAttempts,
|
|
35
|
+
reconnectDelay: this.options.reconnectDelay,
|
|
36
|
+
maxReconnectDelay: this.options.maxReconnectDelay,
|
|
37
|
+
connectTimeout: this.options.connectTimeout,
|
|
38
|
+
commandTimeout: this.options.commandTimeout,
|
|
39
|
+
autoReconnect: this.options.autoReconnect,
|
|
40
|
+
});
|
|
41
|
+
this.clients.push(client);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Connect all clients in pool */
|
|
45
|
+
async connect() {
|
|
46
|
+
await Promise.all(this.clients.map((c) => c.connect()));
|
|
47
|
+
}
|
|
48
|
+
/** Get next client (round-robin) */
|
|
49
|
+
getNextClient() {
|
|
50
|
+
const client = this.clients[this.currentIndex];
|
|
51
|
+
this.currentIndex = (this.currentIndex + 1) % this.clients.length;
|
|
52
|
+
return client;
|
|
53
|
+
}
|
|
54
|
+
/** Send command using next available connection */
|
|
55
|
+
async send(command) {
|
|
56
|
+
if (this.closed) {
|
|
57
|
+
throw new Error('Connection pool is closed');
|
|
58
|
+
}
|
|
59
|
+
return this.getNextClient().send(command);
|
|
60
|
+
}
|
|
61
|
+
/** Send multiple commands in parallel across pool */
|
|
62
|
+
async sendParallel(commands) {
|
|
63
|
+
if (this.closed) {
|
|
64
|
+
throw new Error('Connection pool is closed');
|
|
65
|
+
}
|
|
66
|
+
// Distribute commands across clients
|
|
67
|
+
const promises = commands.map((cmd, i) => {
|
|
68
|
+
const client = this.clients[i % this.clients.length];
|
|
69
|
+
return client.send(cmd);
|
|
70
|
+
});
|
|
71
|
+
return Promise.all(promises);
|
|
72
|
+
}
|
|
73
|
+
/** Check if any connection is ready */
|
|
74
|
+
isConnected() {
|
|
75
|
+
return this.clients.some((c) => c.isConnected());
|
|
76
|
+
}
|
|
77
|
+
/** Get number of connected clients */
|
|
78
|
+
getConnectedCount() {
|
|
79
|
+
return this.clients.filter((c) => c.isConnected()).length;
|
|
80
|
+
}
|
|
81
|
+
/** Get pool size */
|
|
82
|
+
getPoolSize() {
|
|
83
|
+
return this.clients.length;
|
|
84
|
+
}
|
|
85
|
+
/** Close all connections */
|
|
86
|
+
close() {
|
|
87
|
+
this.closed = true;
|
|
88
|
+
for (const client of this.clients) {
|
|
89
|
+
client.close();
|
|
90
|
+
}
|
|
91
|
+
this.clients.length = 0;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Shared pool instance */
|
|
95
|
+
let sharedPool = null;
|
|
96
|
+
/** Get or create shared connection pool */
|
|
97
|
+
export function getSharedPool(options) {
|
|
98
|
+
if (!sharedPool) {
|
|
99
|
+
sharedPool = new TcpConnectionPool(options);
|
|
100
|
+
}
|
|
101
|
+
return sharedPool;
|
|
102
|
+
}
|
|
103
|
+
/** Close shared pool */
|
|
104
|
+
export function closeSharedPool() {
|
|
105
|
+
if (sharedPool) {
|
|
106
|
+
sharedPool.close();
|
|
107
|
+
sharedPool = null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=tcpPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcpPool.js","sourceRoot":"","sources":["../../src/client/tcpPool.ts"],"names":[],"mappings":"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"}
|
package/dist/client/types.d.ts
CHANGED
|
@@ -40,9 +40,24 @@ export interface JobOptions {
|
|
|
40
40
|
pattern?: string;
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
+
/** Connection options for TCP mode */
|
|
44
|
+
export interface ConnectionOptions {
|
|
45
|
+
/** Server host (default: localhost) */
|
|
46
|
+
host?: string;
|
|
47
|
+
/** Server port (default: 6789) */
|
|
48
|
+
port?: number;
|
|
49
|
+
/** Auth token */
|
|
50
|
+
token?: string;
|
|
51
|
+
/** Connection pool size for parallel operations (default: 1, set >1 to enable pooling) */
|
|
52
|
+
poolSize?: number;
|
|
53
|
+
}
|
|
43
54
|
/** Queue options */
|
|
44
55
|
export interface QueueOptions {
|
|
45
56
|
defaultJobOptions?: JobOptions;
|
|
57
|
+
/** Connection options - if omitted, connects to localhost:6789 */
|
|
58
|
+
connection?: ConnectionOptions;
|
|
59
|
+
/** Use embedded mode (in-process SQLite) instead of TCP */
|
|
60
|
+
embedded?: boolean;
|
|
46
61
|
}
|
|
47
62
|
/** Worker options */
|
|
48
63
|
export interface WorkerOptions {
|
|
@@ -50,6 +65,12 @@ export interface WorkerOptions {
|
|
|
50
65
|
autorun?: boolean;
|
|
51
66
|
/** Heartbeat interval in ms (default: 10000) */
|
|
52
67
|
heartbeatInterval?: number;
|
|
68
|
+
/** Connection options - if omitted, connects to localhost:6789 */
|
|
69
|
+
connection?: ConnectionOptions;
|
|
70
|
+
/** Use embedded mode (in-process SQLite) instead of TCP */
|
|
71
|
+
embedded?: boolean;
|
|
72
|
+
/** Batch size for pulling jobs (default: 10, max: 1000). Higher = fewer round-trips */
|
|
73
|
+
batchSize?: number;
|
|
53
74
|
}
|
|
54
75
|
/** Stall configuration for a queue */
|
|
55
76
|
export interface StallConfig {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE9D,qCAAqC;AACrC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,+BAA+B;IAC/B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE;QACP,kCAAkC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,8CAA8C;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,0CAA0C;QAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,oBAAoB;AACpB,MAAM,WAAW,YAAY;IAC3B,iBAAiB,CAAC,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
|
package/dist/client/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyKH,6EAA6E;AAC7E,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAkC,CAAC;QACxE,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAC7B,GAAgB,EAChB,IAAY,EACZ,cAAiF,EACjF,GAAmD;IAEnD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO;QACL,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAM;QACpC,SAAS,EAAE,GAAG,CAAC,KAAK;QACpB,YAAY,EAAE,GAAG,CAAC,QAAQ;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,cAAc,EAAE,CAAC,QAAgB,EAAE,OAAgB,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC7F,GAAG,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,WAAW,CAAI,GAAgB,EAAE,IAAY;IAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO;QACL,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAM;QACpC,SAAS,EAAE,GAAG,CAAC,KAAK;QACpB,YAAY,EAAE,GAAG,CAAC,QAAQ;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,cAAc,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC9B,GAAG,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KACpB,CAAC;AACJ,CAAC;AAID,qDAAqD;AACrD,MAAM,UAAU,UAAU,CAAI,KAAuB;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAgC,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,WAAW,CAAI,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC;QAC1D,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAuB;QACrC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAuB;YACjC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC"}
|
package/dist/client/worker.d.ts
CHANGED
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Worker - BullMQ-style API
|
|
3
|
+
* Default: TCP connection to localhost:6789
|
|
4
|
+
* Optional: embedded mode with { embedded: true }
|
|
5
|
+
*
|
|
6
|
+
* Performance optimizations:
|
|
7
|
+
* - Batch pull: fetches multiple jobs per round-trip (batchSize option)
|
|
8
|
+
* - Batch ACK: acknowledges multiple jobs per round-trip (ackInterval option)
|
|
9
|
+
* - Parallel processing up to concurrency limit
|
|
3
10
|
*/
|
|
4
11
|
import { EventEmitter } from 'events';
|
|
5
12
|
import type { WorkerOptions, Processor } from './types';
|
|
6
13
|
/**
|
|
7
14
|
* Worker class for processing jobs
|
|
15
|
+
* Default: connects to bunqueue server via TCP
|
|
16
|
+
* Use { embedded: true } for in-process mode
|
|
17
|
+
* Set BUNQUEUE_EMBEDDED=1 env var to force embedded mode
|
|
8
18
|
*/
|
|
9
19
|
export declare class Worker<T = unknown, R = unknown> extends EventEmitter {
|
|
10
20
|
readonly name: string;
|
|
11
21
|
private readonly opts;
|
|
12
22
|
private readonly processor;
|
|
23
|
+
private readonly embedded;
|
|
24
|
+
private readonly tcpClient;
|
|
13
25
|
private running;
|
|
14
26
|
private activeJobs;
|
|
15
27
|
private pollTimer;
|
|
16
28
|
private readonly heartbeatTimers;
|
|
17
29
|
private consecutiveErrors;
|
|
30
|
+
private readonly pendingJobs;
|
|
31
|
+
private readonly pendingAcks;
|
|
32
|
+
private ackTimer;
|
|
33
|
+
private readonly ackBatchSize;
|
|
34
|
+
private readonly ackInterval;
|
|
18
35
|
private static readonly MAX_BACKOFF_MS;
|
|
19
36
|
private static readonly BASE_BACKOFF_MS;
|
|
20
37
|
constructor(name: string, processor: Processor<T, R>, opts?: WorkerOptions);
|
|
@@ -28,6 +45,16 @@ export declare class Worker<T = unknown, R = unknown> extends EventEmitter {
|
|
|
28
45
|
close(force?: boolean): Promise<void>;
|
|
29
46
|
private poll;
|
|
30
47
|
private tryProcess;
|
|
48
|
+
/** Pull batch (embedded) */
|
|
49
|
+
private pullBatchEmbedded;
|
|
50
|
+
/** Pull batch of jobs via TCP */
|
|
51
|
+
private pullBatchTcp;
|
|
52
|
+
/** Parse job from TCP response */
|
|
53
|
+
private parseJob;
|
|
54
|
+
/** Queue ACK for batch processing - fire and forget */
|
|
55
|
+
private queueAckFireAndForget;
|
|
56
|
+
/** Flush pending ACKs in batch */
|
|
57
|
+
private flushAcks;
|
|
31
58
|
private processJob;
|
|
32
59
|
/** Start heartbeat timer for a job */
|
|
33
60
|
private startHeartbeat;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAqB,MAAM,SAAS,CAAC;AAsB3E;;;;;GAKG;AACH,qBAAa,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0D;IAC1F,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAGjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;gBAElC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,GAAE,aAAkB;IAiC9E,uBAAuB;IACvB,GAAG,IAAI,IAAI;IAOX,uBAAuB;IACvB,KAAK,IAAI,IAAI;IAQb,wBAAwB;IACxB,MAAM,IAAI,IAAI;IAId,8BAA8B;IACxB,KAAK,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BzC,OAAO,CAAC,IAAI;YAaE,UAAU;IA2ExB,4BAA4B;YACd,iBAAiB;IAS/B,iCAAiC;YACnB,YAAY;IAsB1B,kCAAkC;IAClC,OAAO,CAAC,QAAQ;IAmChB,uDAAuD;IACvD,OAAO,CAAC,qBAAqB;IAoB7B,kCAAkC;YACpB,SAAS;YA0CT,UAAU;IAoFxB,sCAAsC;IACtC,OAAO,CAAC,cAAc;IAWtB,qCAAqC;IACrC,OAAO,CAAC,aAAa;CAOtB"}
|