bunqueue 2.6.54 → 2.6.56
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/infrastructure/cloud/cloudAgent.d.ts +10 -5
- package/dist/infrastructure/cloud/cloudAgent.d.ts.map +1 -1
- package/dist/infrastructure/cloud/cloudAgent.js +39 -28
- package/dist/infrastructure/cloud/cloudAgent.js.map +1 -1
- package/dist/infrastructure/cloud/httpSender.d.ts +2 -1
- package/dist/infrastructure/cloud/httpSender.d.ts.map +1 -1
- package/dist/infrastructure/cloud/httpSender.js +9 -5
- package/dist/infrastructure/cloud/httpSender.js.map +1 -1
- package/dist/infrastructure/cloud/snapshotCollector.d.ts +7 -5
- package/dist/infrastructure/cloud/snapshotCollector.d.ts.map +1 -1
- package/dist/infrastructure/cloud/snapshotCollector.js +24 -161
- package/dist/infrastructure/cloud/snapshotCollector.js.map +1 -1
- package/dist/infrastructure/cloud/snapshotHelpers.d.ts +40 -0
- package/dist/infrastructure/cloud/snapshotHelpers.d.ts.map +1 -0
- package/dist/infrastructure/cloud/snapshotHelpers.js +333 -0
- package/dist/infrastructure/cloud/snapshotHelpers.js.map +1 -0
- package/dist/infrastructure/cloud/types.d.ts +63 -1
- package/dist/infrastructure/cloud/types.d.ts.map +1 -1
- package/dist/infrastructure/cloud/wsSender.d.ts +14 -20
- package/dist/infrastructure/cloud/wsSender.d.ts.map +1 -1
- package/dist/infrastructure/cloud/wsSender.js +64 -113
- package/dist/infrastructure/cloud/wsSender.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WebSocket
|
|
3
|
-
*
|
|
2
|
+
* WebSocket Command Channel
|
|
3
|
+
* Persistent WebSocket connection for receiving commands from the dashboard.
|
|
4
4
|
*
|
|
5
5
|
* Features:
|
|
6
6
|
* - Auth via HTTP upgrade headers (Bun-specific) — no handshake message needed
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* - Local socket ref: pong always replies on the correct socket after reconnect
|
|
7
|
+
* - MessagePack + zstd: binary frames with ~95% compression
|
|
8
|
+
* - Commands only: all data goes via HTTP, WS is for remote commands
|
|
10
9
|
* - Keepalive: server sends ping every 25s, bunqueue responds pong
|
|
11
10
|
*/
|
|
11
|
+
import { pack, unpack } from 'msgpackr';
|
|
12
12
|
import { cloudLog } from './logger';
|
|
13
|
-
const EVENT_BUFFER_MAX = 1000;
|
|
14
13
|
export class WsSender {
|
|
15
14
|
config;
|
|
16
15
|
instanceId;
|
|
@@ -20,8 +19,6 @@ export class WsSender {
|
|
|
20
19
|
stopped = false;
|
|
21
20
|
connected = false;
|
|
22
21
|
reconnectTimer = null;
|
|
23
|
-
/** Ring buffer for events while disconnected */
|
|
24
|
-
eventBuffer = [];
|
|
25
22
|
onCommand = null;
|
|
26
23
|
constructor(config, instanceId) {
|
|
27
24
|
this.config = config;
|
|
@@ -35,17 +32,17 @@ export class WsSender {
|
|
|
35
32
|
connect() {
|
|
36
33
|
if (this.stopped)
|
|
37
34
|
return;
|
|
38
|
-
// Close previous socket if still lingering
|
|
39
35
|
this.cleanup();
|
|
40
|
-
const wsUrl = this.config.url.replace(/^http/, 'ws').concat('/api/v1/
|
|
36
|
+
const wsUrl = this.config.url.replace(/^http/, 'ws').concat('/api/v1/commands');
|
|
41
37
|
let ws;
|
|
42
38
|
try {
|
|
43
|
-
// Auth via HTTP upgrade headers (Bun-specific extension) — no handshake message needed
|
|
44
39
|
ws = new WebSocket(wsUrl, {
|
|
45
40
|
headers: {
|
|
46
41
|
Authorization: `Bearer ${this.config.apiKey}`,
|
|
47
42
|
'X-Instance-Id': this.instanceId,
|
|
48
43
|
'X-Remote-Commands': this.config.remoteCommands ? '1' : '0',
|
|
44
|
+
'X-Protocol': 'msgpack',
|
|
45
|
+
'X-Encoding': 'zstd',
|
|
49
46
|
},
|
|
50
47
|
});
|
|
51
48
|
}
|
|
@@ -55,65 +52,23 @@ export class WsSender {
|
|
|
55
52
|
return;
|
|
56
53
|
}
|
|
57
54
|
this.ws = ws;
|
|
55
|
+
ws.binaryType = 'arraybuffer';
|
|
58
56
|
ws.onopen = () => {
|
|
59
57
|
this.connected = true;
|
|
60
58
|
this.reconnectDelay = 1000;
|
|
61
|
-
cloudLog.info('
|
|
62
|
-
// Flush buffered events immediately — auth already done via headers
|
|
63
|
-
this.flushBuffer(ws);
|
|
59
|
+
cloudLog.info('Command channel connected (msgpack+zstd)');
|
|
64
60
|
};
|
|
65
|
-
// Handle incoming messages (pings + commands from dashboard)
|
|
66
|
-
// Uses local `ws` ref — NOT `this.ws` — to always reply on the correct socket
|
|
67
61
|
ws.onmessage = (event) => {
|
|
68
|
-
|
|
69
|
-
let raw;
|
|
70
|
-
const d = event.data;
|
|
71
|
-
if (typeof d === 'string') {
|
|
72
|
-
raw = d;
|
|
73
|
-
}
|
|
74
|
-
else if (d instanceof ArrayBuffer) {
|
|
75
|
-
raw = new TextDecoder().decode(d);
|
|
76
|
-
}
|
|
77
|
-
else if (d instanceof Buffer) {
|
|
78
|
-
raw = d.toString('utf-8');
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
raw = String(d);
|
|
82
|
-
}
|
|
83
|
-
const msg = JSON.parse(raw);
|
|
84
|
-
// Server heartbeat — respond immediately on the SAME socket
|
|
85
|
-
if (msg.type === 'ping') {
|
|
86
|
-
ws.send(JSON.stringify({ type: 'pong' }));
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
// Server pong (in case we add client ping back later)
|
|
90
|
-
if (msg.type === 'pong') {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
if (msg.type === 'handshake_ack') {
|
|
94
|
-
cloudLog.debug('Handshake acknowledged');
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
// Commands
|
|
98
|
-
if (this.onCommand &&
|
|
99
|
-
this.config.remoteCommands &&
|
|
100
|
-
msg.type === 'command' &&
|
|
101
|
-
msg.action &&
|
|
102
|
-
msg.id) {
|
|
103
|
-
this.onCommand(msg);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
62
|
+
this.handleMessage(ws, event.data).catch((err) => {
|
|
107
63
|
cloudLog.debug('WS message parse error', {
|
|
108
64
|
dataType: typeof event.data,
|
|
109
65
|
isArrayBuffer: event.data instanceof ArrayBuffer,
|
|
110
|
-
preview: String(event.data).slice(0, 100),
|
|
111
66
|
error: String(err),
|
|
112
67
|
});
|
|
113
|
-
}
|
|
68
|
+
});
|
|
114
69
|
};
|
|
115
70
|
ws.onclose = (ev) => {
|
|
116
|
-
cloudLog.info('
|
|
71
|
+
cloudLog.info('Command channel closed', { code: ev.code, reason: ev.reason });
|
|
117
72
|
this.connected = false;
|
|
118
73
|
if (!this.stopped) {
|
|
119
74
|
this.scheduleReconnect();
|
|
@@ -123,47 +78,13 @@ export class WsSender {
|
|
|
123
78
|
this.connected = false;
|
|
124
79
|
};
|
|
125
80
|
}
|
|
126
|
-
/** Send
|
|
127
|
-
send(event) {
|
|
128
|
-
if (this.connected && this.ws) {
|
|
129
|
-
try {
|
|
130
|
-
this.ws.send(JSON.stringify(event));
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
// Fall through to buffer
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
// Buffer when disconnected (ring buffer — drop oldest)
|
|
138
|
-
if (this.eventBuffer.length >= EVENT_BUFFER_MAX) {
|
|
139
|
-
this.eventBuffer.shift();
|
|
140
|
-
}
|
|
141
|
-
this.eventBuffer.push(event);
|
|
142
|
-
}
|
|
143
|
-
/** Send any JSON payload on the WebSocket */
|
|
81
|
+
/** Send a command result back to dashboard */
|
|
144
82
|
sendRaw(data) {
|
|
145
83
|
if (!this.connected || !this.ws)
|
|
146
84
|
return;
|
|
147
|
-
|
|
148
|
-
this.ws.send(JSON.stringify(data));
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
85
|
+
this.sendBinary(this.ws, data).catch(() => {
|
|
151
86
|
// Best-effort: dropped
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Drain buffered events for HTTP fallback (dual-channel).
|
|
156
|
-
* Returns and clears all buffered events.
|
|
157
|
-
*/
|
|
158
|
-
drainBufferedEvents() {
|
|
159
|
-
if (this.eventBuffer.length === 0)
|
|
160
|
-
return [];
|
|
161
|
-
const events = this.eventBuffer.splice(0);
|
|
162
|
-
return events;
|
|
163
|
-
}
|
|
164
|
-
/** Number of buffered events */
|
|
165
|
-
getBufferSize() {
|
|
166
|
-
return this.eventBuffer.length;
|
|
87
|
+
});
|
|
167
88
|
}
|
|
168
89
|
/** Graceful shutdown */
|
|
169
90
|
stop() {
|
|
@@ -178,25 +99,56 @@ export class WsSender {
|
|
|
178
99
|
isConnected() {
|
|
179
100
|
return this.connected;
|
|
180
101
|
}
|
|
181
|
-
/**
|
|
182
|
-
|
|
183
|
-
|
|
102
|
+
/** Handle incoming WS message (async for zstd decompression) */
|
|
103
|
+
async handleMessage(ws, data) {
|
|
104
|
+
const msg = await this.decodeMessage(data);
|
|
105
|
+
if (!msg)
|
|
184
106
|
return;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
107
|
+
if (msg.type === 'ping') {
|
|
108
|
+
await this.sendBinary(ws, { type: 'pong' });
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (msg.type === 'pong')
|
|
112
|
+
return;
|
|
113
|
+
if (msg.type === 'handshake_ack') {
|
|
114
|
+
cloudLog.debug('Handshake acknowledged');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (this.onCommand &&
|
|
118
|
+
this.config.remoteCommands &&
|
|
119
|
+
msg.type === 'command' &&
|
|
120
|
+
msg.action &&
|
|
121
|
+
msg.id) {
|
|
122
|
+
this.onCommand(msg);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** Encode and send as zstd(msgpack) binary frame */
|
|
126
|
+
async sendBinary(ws, data) {
|
|
127
|
+
ws.send(await Bun.zstdCompress(pack(data)));
|
|
128
|
+
}
|
|
129
|
+
/** Decode incoming message — supports zstd+msgpack, plain msgpack, and JSON (text) */
|
|
130
|
+
decodeMessage(data) {
|
|
131
|
+
if (data instanceof ArrayBuffer) {
|
|
132
|
+
return this.decodeBinary(Buffer.from(data));
|
|
133
|
+
}
|
|
134
|
+
if (typeof data === 'string') {
|
|
135
|
+
return Promise.resolve(JSON.parse(data));
|
|
136
|
+
}
|
|
137
|
+
if (data instanceof Buffer) {
|
|
138
|
+
return this.decodeBinary(data);
|
|
139
|
+
}
|
|
140
|
+
return Promise.resolve(null);
|
|
141
|
+
}
|
|
142
|
+
/** Decode binary buffer — auto-detect zstd (magic bytes 28 b5 2f fd) vs plain msgpack */
|
|
143
|
+
async decodeBinary(buf) {
|
|
144
|
+
if (buf.length >= 4 &&
|
|
145
|
+
buf[0] === 0x28 &&
|
|
146
|
+
buf[1] === 0xb5 &&
|
|
147
|
+
buf[2] === 0x2f &&
|
|
148
|
+
buf[3] === 0xfd) {
|
|
149
|
+
return unpack(Buffer.from(await Bun.zstdDecompress(buf)));
|
|
199
150
|
}
|
|
151
|
+
return unpack(buf);
|
|
200
152
|
}
|
|
201
153
|
/** Clean up socket handlers and close */
|
|
202
154
|
cleanup() {
|
|
@@ -216,7 +168,6 @@ export class WsSender {
|
|
|
216
168
|
scheduleReconnect() {
|
|
217
169
|
if (this.stopped)
|
|
218
170
|
return;
|
|
219
|
-
// Prevent duplicate reconnect timers
|
|
220
171
|
if (this.reconnectTimer)
|
|
221
172
|
return;
|
|
222
173
|
const jitter = Math.random() * 1000;
|
|
@@ -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.56",
|
|
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",
|