bunqueue 2.6.47 → 2.6.48
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/cli/commands/server.d.ts.map +1 -1
- package/dist/cli/commands/server.js +5 -1
- package/dist/cli/commands/server.js.map +1 -1
- package/dist/infrastructure/cloud/wsSender.d.ts +2 -9
- package/dist/infrastructure/cloud/wsSender.d.ts.map +1 -1
- package/dist/infrastructure/cloud/wsSender.js +19 -93
- package/dist/infrastructure/cloud/wsSender.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiEH,qBAAqB;AACrB,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGhF"}
|
|
@@ -32,7 +32,11 @@ function parseServerArgs(args) {
|
|
|
32
32
|
tcpPort: validatePort(values['tcp-port'] ?? Bun.env.TCP_PORT ?? '6789', 'TCP port', 6789),
|
|
33
33
|
httpPort: validatePort(values['http-port'] ?? Bun.env.HTTP_PORT ?? '6790', 'HTTP port', 6790),
|
|
34
34
|
host: values.host ?? Bun.env.HOST ?? '0.0.0.0',
|
|
35
|
-
dataPath: values['data-path'] ??
|
|
35
|
+
dataPath: values['data-path'] ??
|
|
36
|
+
Bun.env.BUNQUEUE_DATA_PATH ??
|
|
37
|
+
Bun.env.BQ_DATA_PATH ??
|
|
38
|
+
Bun.env.DATA_PATH ??
|
|
39
|
+
Bun.env.SQLITE_PATH,
|
|
36
40
|
authTokens: values['auth-tokens']?.split(',').filter(Boolean) ??
|
|
37
41
|
Bun.env.AUTH_TOKENS?.split(',').filter(Boolean) ??
|
|
38
42
|
[],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAW/C,2BAA2B;AAC3B,SAAS,YAAY,CAAC,KAAa,EAAE,IAAY,EAAE,WAAmB;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,KAAK,KAAK,oBAAoB,WAAW,GAAG,CAAC,CAAC;QACnF,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6BAA6B;AAC7B,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,IAAI;QACJ,OAAO,EAAE;YACP,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAClC;QACD,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,YAAY,CAClB,MAAM,CAAC,UAAU,CAAY,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAC5D,UAAU,EACV,IAAI,CACL;QACD,QAAQ,EAAE,YAAY,CACnB,MAAM,CAAC,WAAW,CAAY,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,EAC9D,WAAW,EACX,IAAI,CACL;QACD,IAAI,EAAG,MAAM,CAAC,IAAe,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;QAC1D,QAAQ,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/commands/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
* Maintains a persistent outbound WebSocket to the dashboard for real-time events.
|
|
4
4
|
*
|
|
5
5
|
* Features:
|
|
6
|
+
* - Auth via HTTP upgrade headers (Bun-specific) — no handshake message needed
|
|
6
7
|
* - Ring buffer: events are buffered when disconnected, flushed on reconnect
|
|
7
|
-
* - Client-side ping: detects dead connections in ~10s (vs 40s server-side)
|
|
8
8
|
* - Binary frame handling: works behind Cloudflare (text + ArrayBuffer)
|
|
9
9
|
* - Local socket ref: pong always replies on the correct socket after reconnect
|
|
10
|
+
* - Keepalive: server sends ping every 25s, bunqueue responds pong
|
|
10
11
|
*/
|
|
11
12
|
import type { CloudConfig, CloudEvent } from './types';
|
|
12
13
|
import type { CloudCommand } from './commandHandler';
|
|
@@ -19,11 +20,6 @@ export declare class WsSender {
|
|
|
19
20
|
private stopped;
|
|
20
21
|
private connected;
|
|
21
22
|
private reconnectTimer;
|
|
22
|
-
private pingTimer;
|
|
23
|
-
private pongTimer;
|
|
24
|
-
private awaitingPong;
|
|
25
|
-
private handshakeAckTimer;
|
|
26
|
-
private flushed;
|
|
27
23
|
/** Ring buffer for events while disconnected */
|
|
28
24
|
private readonly eventBuffer;
|
|
29
25
|
private onCommand;
|
|
@@ -48,9 +44,6 @@ export declare class WsSender {
|
|
|
48
44
|
isConnected(): boolean;
|
|
49
45
|
/** Flush buffered events on reconnect */
|
|
50
46
|
private flushBuffer;
|
|
51
|
-
/** Client-side ping: detect dead connections faster than server timeout */
|
|
52
|
-
private startClientPing;
|
|
53
|
-
private stopClientPing;
|
|
54
47
|
/** Clean up socket handlers and close */
|
|
55
48
|
private cleanup;
|
|
56
49
|
private scheduleReconnect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsSender.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wsSender.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKrD,qBAAa,QAAQ;IAcjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAd7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA8C;IAEpE,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAEhD,OAAO,CAAC,SAAS,CAA8C;gBAG5C,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM;IAGrC,uDAAuD;IACvD,iBAAiB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI7D,oCAAoC;IACpC,OAAO,IAAI,IAAI;IAsGf,6DAA6D;IAC7D,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAiB7B,6CAA6C;IAC7C,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAU5B;;;OAGG;IACH,mBAAmB,IAAI,UAAU,EAAE;IAMnC,gCAAgC;IAChC,aAAa,IAAI,MAAM;IAIvB,wBAAwB;IACxB,IAAI,IAAI,IAAI;IAUZ,WAAW,IAAI,OAAO;IAItB,yCAAyC;IACzC,OAAO,CAAC,WAAW;IAmBnB,yCAAyC;IACzC,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,iBAAiB;CAgB1B"}
|
|
@@ -3,16 +3,14 @@
|
|
|
3
3
|
* Maintains a persistent outbound WebSocket to the dashboard for real-time events.
|
|
4
4
|
*
|
|
5
5
|
* Features:
|
|
6
|
+
* - Auth via HTTP upgrade headers (Bun-specific) — no handshake message needed
|
|
6
7
|
* - Ring buffer: events are buffered when disconnected, flushed on reconnect
|
|
7
|
-
* - Client-side ping: detects dead connections in ~10s (vs 40s server-side)
|
|
8
8
|
* - Binary frame handling: works behind Cloudflare (text + ArrayBuffer)
|
|
9
9
|
* - Local socket ref: pong always replies on the correct socket after reconnect
|
|
10
|
+
* - Keepalive: server sends ping every 25s, bunqueue responds pong
|
|
10
11
|
*/
|
|
11
12
|
import { cloudLog } from './logger';
|
|
12
13
|
const EVENT_BUFFER_MAX = 1000;
|
|
13
|
-
const CLIENT_PING_INTERVAL = 10_000;
|
|
14
|
-
const CLIENT_PONG_TIMEOUT = 5_000;
|
|
15
|
-
const HANDSHAKE_ACK_TIMEOUT = 5_000;
|
|
16
14
|
export class WsSender {
|
|
17
15
|
config;
|
|
18
16
|
instanceId;
|
|
@@ -22,11 +20,6 @@ export class WsSender {
|
|
|
22
20
|
stopped = false;
|
|
23
21
|
connected = false;
|
|
24
22
|
reconnectTimer = null;
|
|
25
|
-
pingTimer = null;
|
|
26
|
-
pongTimer = null;
|
|
27
|
-
awaitingPong = false;
|
|
28
|
-
handshakeAckTimer = null;
|
|
29
|
-
flushed = false;
|
|
30
23
|
/** Ring buffer for events while disconnected */
|
|
31
24
|
eventBuffer = [];
|
|
32
25
|
onCommand = null;
|
|
@@ -47,7 +40,14 @@ export class WsSender {
|
|
|
47
40
|
const wsUrl = this.config.url.replace(/^http/, 'ws').concat('/api/v1/stream');
|
|
48
41
|
let ws;
|
|
49
42
|
try {
|
|
50
|
-
|
|
43
|
+
// Auth via HTTP upgrade headers (Bun-specific extension) — no handshake message needed
|
|
44
|
+
ws = new WebSocket(wsUrl, {
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
47
|
+
'X-Instance-Id': this.instanceId,
|
|
48
|
+
'X-Remote-Commands': this.config.remoteCommands ? '1' : '0',
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
51
|
}
|
|
52
52
|
catch (err) {
|
|
53
53
|
cloudLog.debug('WS connect error', { error: String(err) });
|
|
@@ -59,26 +59,10 @@ export class WsSender {
|
|
|
59
59
|
this.connected = true;
|
|
60
60
|
this.reconnectDelay = 1000;
|
|
61
61
|
cloudLog.info('WebSocket stream connected');
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
type: 'handshake',
|
|
65
|
-
instanceId: this.instanceId,
|
|
66
|
-
apiKey: this.config.apiKey,
|
|
67
|
-
remoteCommands: this.config.remoteCommands,
|
|
68
|
-
}));
|
|
69
|
-
// Flush after handshake_ack, with fallback timeout
|
|
70
|
-
this.flushed = false;
|
|
71
|
-
this.handshakeAckTimer = setTimeout(() => {
|
|
72
|
-
if (!this.flushed) {
|
|
73
|
-
cloudLog.debug('handshake_ack timeout — flushing buffer anyway');
|
|
74
|
-
this.flushed = true;
|
|
75
|
-
this.flushBuffer(ws);
|
|
76
|
-
}
|
|
77
|
-
}, HANDSHAKE_ACK_TIMEOUT);
|
|
78
|
-
// Start client-side ping
|
|
79
|
-
this.startClientPing(ws);
|
|
62
|
+
// Flush buffered events immediately — auth already done via headers
|
|
63
|
+
this.flushBuffer(ws);
|
|
80
64
|
};
|
|
81
|
-
// Handle incoming messages (pings +
|
|
65
|
+
// Handle incoming messages (pings + commands from dashboard)
|
|
82
66
|
// Uses local `ws` ref — NOT `this.ws` — to always reply on the correct socket
|
|
83
67
|
ws.onmessage = (event) => {
|
|
84
68
|
try {
|
|
@@ -102,25 +86,12 @@ export class WsSender {
|
|
|
102
86
|
ws.send(JSON.stringify({ type: 'pong' }));
|
|
103
87
|
return;
|
|
104
88
|
}
|
|
105
|
-
//
|
|
89
|
+
// Server pong (in case we add client ping back later)
|
|
106
90
|
if (msg.type === 'pong') {
|
|
107
|
-
this.awaitingPong = false;
|
|
108
|
-
if (this.pongTimer) {
|
|
109
|
-
clearTimeout(this.pongTimer);
|
|
110
|
-
this.pongTimer = null;
|
|
111
|
-
}
|
|
112
91
|
return;
|
|
113
92
|
}
|
|
114
93
|
if (msg.type === 'handshake_ack') {
|
|
115
94
|
cloudLog.debug('Handshake acknowledged');
|
|
116
|
-
if (!this.flushed) {
|
|
117
|
-
this.flushed = true;
|
|
118
|
-
if (this.handshakeAckTimer) {
|
|
119
|
-
clearTimeout(this.handshakeAckTimer);
|
|
120
|
-
this.handshakeAckTimer = null;
|
|
121
|
-
}
|
|
122
|
-
this.flushBuffer(ws);
|
|
123
|
-
}
|
|
124
95
|
return;
|
|
125
96
|
}
|
|
126
97
|
// Commands
|
|
@@ -142,9 +113,8 @@ export class WsSender {
|
|
|
142
113
|
}
|
|
143
114
|
};
|
|
144
115
|
ws.onclose = (ev) => {
|
|
145
|
-
cloudLog.
|
|
116
|
+
cloudLog.info('WebSocket closed', { code: ev.code, reason: ev.reason });
|
|
146
117
|
this.connected = false;
|
|
147
|
-
this.stopClientPing();
|
|
148
118
|
if (!this.stopped) {
|
|
149
119
|
this.scheduleReconnect();
|
|
150
120
|
}
|
|
@@ -198,15 +168,10 @@ export class WsSender {
|
|
|
198
168
|
/** Graceful shutdown */
|
|
199
169
|
stop() {
|
|
200
170
|
this.stopped = true;
|
|
201
|
-
this.stopClientPing();
|
|
202
171
|
if (this.reconnectTimer) {
|
|
203
172
|
clearTimeout(this.reconnectTimer);
|
|
204
173
|
this.reconnectTimer = null;
|
|
205
174
|
}
|
|
206
|
-
if (this.handshakeAckTimer) {
|
|
207
|
-
clearTimeout(this.handshakeAckTimer);
|
|
208
|
-
this.handshakeAckTimer = null;
|
|
209
|
-
}
|
|
210
175
|
this.cleanup();
|
|
211
176
|
this.connected = false;
|
|
212
177
|
}
|
|
@@ -233,49 +198,6 @@ export class WsSender {
|
|
|
233
198
|
}
|
|
234
199
|
}
|
|
235
200
|
}
|
|
236
|
-
/** Client-side ping: detect dead connections faster than server timeout */
|
|
237
|
-
startClientPing(ws) {
|
|
238
|
-
this.stopClientPing();
|
|
239
|
-
this.pingTimer = setInterval(() => {
|
|
240
|
-
if (!this.connected || this.awaitingPong)
|
|
241
|
-
return;
|
|
242
|
-
try {
|
|
243
|
-
ws.send(JSON.stringify({ type: 'ping' }));
|
|
244
|
-
this.awaitingPong = true;
|
|
245
|
-
// If no pong within timeout, connection is dead.
|
|
246
|
-
// Only close the socket — onclose will handle scheduleReconnect.
|
|
247
|
-
this.pongTimer = setTimeout(() => {
|
|
248
|
-
if (this.awaitingPong) {
|
|
249
|
-
cloudLog.debug('Client ping timeout — closing socket');
|
|
250
|
-
this.awaitingPong = false;
|
|
251
|
-
this.stopClientPing();
|
|
252
|
-
try {
|
|
253
|
-
ws.close(4000, 'ping timeout');
|
|
254
|
-
}
|
|
255
|
-
catch {
|
|
256
|
-
// If close fails, force state and reconnect manually
|
|
257
|
-
this.connected = false;
|
|
258
|
-
this.scheduleReconnect();
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}, CLIENT_PONG_TIMEOUT);
|
|
262
|
-
}
|
|
263
|
-
catch {
|
|
264
|
-
// Socket dead, onclose will handle reconnect
|
|
265
|
-
}
|
|
266
|
-
}, CLIENT_PING_INTERVAL);
|
|
267
|
-
}
|
|
268
|
-
stopClientPing() {
|
|
269
|
-
if (this.pingTimer) {
|
|
270
|
-
clearInterval(this.pingTimer);
|
|
271
|
-
this.pingTimer = null;
|
|
272
|
-
}
|
|
273
|
-
if (this.pongTimer) {
|
|
274
|
-
clearTimeout(this.pongTimer);
|
|
275
|
-
this.pongTimer = null;
|
|
276
|
-
}
|
|
277
|
-
this.awaitingPong = false;
|
|
278
|
-
}
|
|
279
201
|
/** Clean up socket handlers and close */
|
|
280
202
|
cleanup() {
|
|
281
203
|
if (this.ws) {
|
|
@@ -294,9 +216,13 @@ export class WsSender {
|
|
|
294
216
|
scheduleReconnect() {
|
|
295
217
|
if (this.stopped)
|
|
296
218
|
return;
|
|
219
|
+
// Prevent duplicate reconnect timers
|
|
220
|
+
if (this.reconnectTimer)
|
|
221
|
+
return;
|
|
297
222
|
const jitter = Math.random() * 1000;
|
|
298
223
|
const delay = this.reconnectDelay + jitter;
|
|
299
224
|
this.reconnectTimer = setTimeout(() => {
|
|
225
|
+
this.reconnectTimer = null;
|
|
300
226
|
this.connect();
|
|
301
227
|
}, delay);
|
|
302
228
|
this.reconnectDelay = Math.min(this.reconnectDelay * 2, this.maxReconnectDelay);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsSender.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wsSender.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bunqueue",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.48",
|
|
4
4
|
"description": "High-performance job queue for Bun & AI agents. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks, native MCP server. Zero external dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|