@mochabug/adapt-web 0.0.67 → 0.0.69
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/cjs/index.js +5 -286
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/pubsub-client.js +500 -0
- package/dist/cjs/pubsub-client.js.map +1 -0
- package/dist/esm/index.js +2 -281
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pubsub-client.js +493 -0
- package/dist/esm/pubsub-client.js.map +1 -0
- package/dist/types/index.d.ts +2 -53
- package/dist/types/pubsub-client.d.ts +52 -0
- package/package.json +1 -1
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import { fromBinary, toJson } from "@bufbuild/protobuf";
|
|
2
|
+
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
3
|
+
import WebSocket from "isomorphic-ws";
|
|
4
|
+
import { parse as parseUuid } from "uuid";
|
|
5
|
+
import { SessionSchema, UrlSchema, WebsocketMessageSchema, } from "./genproto/mochabugapis/adapt/automations/v1/automations_pb.js";
|
|
6
|
+
import { getConfig } from "./index.js";
|
|
7
|
+
// Connection states
|
|
8
|
+
export var ConnectionState;
|
|
9
|
+
(function (ConnectionState) {
|
|
10
|
+
ConnectionState["DISCONNECTED"] = "disconnected";
|
|
11
|
+
ConnectionState["CONNECTING"] = "connecting";
|
|
12
|
+
ConnectionState["CONNECTED"] = "connected";
|
|
13
|
+
ConnectionState["CLOSING"] = "closing";
|
|
14
|
+
})(ConnectionState || (ConnectionState = {}));
|
|
15
|
+
// Logger class for consistent logging
|
|
16
|
+
class Logger {
|
|
17
|
+
constructor(debug) {
|
|
18
|
+
this.debug = debug;
|
|
19
|
+
}
|
|
20
|
+
log(level, message, data) {
|
|
21
|
+
if (!this.debug && level === "debug")
|
|
22
|
+
return;
|
|
23
|
+
const timestamp = new Date().toISOString();
|
|
24
|
+
const prefix = `[PubSub ${timestamp}]`;
|
|
25
|
+
const fullMessage = `${prefix} ${message}`;
|
|
26
|
+
if (data !== undefined) {
|
|
27
|
+
console[level](fullMessage, data);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console[level](fullMessage);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// ACK tracker to prevent duplicate message processing
|
|
35
|
+
class AckTracker {
|
|
36
|
+
constructor(logger) {
|
|
37
|
+
this.logger = logger;
|
|
38
|
+
this.ackedMessages = new Map();
|
|
39
|
+
this.MESSAGE_TTL = 60000; // 60 seconds
|
|
40
|
+
this.cleanupTimer = null;
|
|
41
|
+
}
|
|
42
|
+
start() {
|
|
43
|
+
// Cleanup old messages every 30 seconds
|
|
44
|
+
this.cleanupTimer = setInterval(() => this.cleanup(), 30000);
|
|
45
|
+
}
|
|
46
|
+
stop() {
|
|
47
|
+
if (this.cleanupTimer) {
|
|
48
|
+
clearInterval(this.cleanupTimer);
|
|
49
|
+
this.cleanupTimer = null;
|
|
50
|
+
}
|
|
51
|
+
this.ackedMessages.clear();
|
|
52
|
+
}
|
|
53
|
+
isProcessed(messageId) {
|
|
54
|
+
return this.ackedMessages.has(messageId);
|
|
55
|
+
}
|
|
56
|
+
markProcessed(messageId) {
|
|
57
|
+
this.ackedMessages.set(messageId, Date.now());
|
|
58
|
+
}
|
|
59
|
+
cleanup() {
|
|
60
|
+
const now = Date.now();
|
|
61
|
+
const deadline = now - this.MESSAGE_TTL;
|
|
62
|
+
let removed = 0;
|
|
63
|
+
for (const [messageId, timestamp] of this.ackedMessages.entries()) {
|
|
64
|
+
if (timestamp < deadline) {
|
|
65
|
+
this.ackedMessages.delete(messageId);
|
|
66
|
+
removed++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (removed > 0) {
|
|
70
|
+
this.logger.log("debug", `Cleaned up ${removed} old ACKed messages`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Reconnection manager with exponential backoff
|
|
75
|
+
class ReconnectionManager {
|
|
76
|
+
constructor(logger) {
|
|
77
|
+
this.logger = logger;
|
|
78
|
+
this.attempts = 0;
|
|
79
|
+
this.timer = null;
|
|
80
|
+
this.INITIAL_DELAY = 1000; // 1 second
|
|
81
|
+
this.MAX_DELAY = 30000; // 30 seconds
|
|
82
|
+
this.MAX_ATTEMPTS = -1; // -1 = infinite
|
|
83
|
+
}
|
|
84
|
+
reset() {
|
|
85
|
+
this.attempts = 0;
|
|
86
|
+
this.cancel();
|
|
87
|
+
}
|
|
88
|
+
cancel() {
|
|
89
|
+
if (this.timer) {
|
|
90
|
+
clearTimeout(this.timer);
|
|
91
|
+
this.timer = null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
scheduleReconnect(callback) {
|
|
95
|
+
if (this.MAX_ATTEMPTS !== -1 && this.attempts >= this.MAX_ATTEMPTS) {
|
|
96
|
+
this.logger.log("error", "Max reconnection attempts reached");
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
this.attempts++;
|
|
100
|
+
const delay = Math.min(this.INITIAL_DELAY * Math.pow(2, this.attempts - 1), this.MAX_DELAY);
|
|
101
|
+
this.logger.log("info", `Scheduling reconnect attempt ${this.attempts} in ${delay}ms`);
|
|
102
|
+
this.timer = setTimeout(() => {
|
|
103
|
+
this.timer = null;
|
|
104
|
+
callback();
|
|
105
|
+
}, delay);
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// WebSocket connection manager
|
|
110
|
+
class WebSocketManager {
|
|
111
|
+
constructor(logger) {
|
|
112
|
+
this.logger = logger;
|
|
113
|
+
this.ws = null;
|
|
114
|
+
this.pingTimer = null;
|
|
115
|
+
this.PING_INTERVAL = 10000; // 10 seconds
|
|
116
|
+
}
|
|
117
|
+
connect(url, onOpen, onMessage, onClose, onError) {
|
|
118
|
+
if (this.ws) {
|
|
119
|
+
throw new Error("WebSocket already exists");
|
|
120
|
+
}
|
|
121
|
+
this.logger.log("info", `Connecting to: ${url}`);
|
|
122
|
+
this.ws = new WebSocket(url);
|
|
123
|
+
this.ws.binaryType = "arraybuffer";
|
|
124
|
+
this.ws.onopen = () => {
|
|
125
|
+
this.logger.log("info", "✓ WebSocket connected");
|
|
126
|
+
this.startPing();
|
|
127
|
+
onOpen();
|
|
128
|
+
};
|
|
129
|
+
this.ws.onmessage = (event) => {
|
|
130
|
+
if (event.data instanceof ArrayBuffer) {
|
|
131
|
+
onMessage(event.data);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this.logger.log("warn", "Received non-binary message, ignoring");
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
this.ws.onerror = (error) => {
|
|
138
|
+
this.logger.log("error", "WebSocket error:", error);
|
|
139
|
+
onError(error);
|
|
140
|
+
};
|
|
141
|
+
this.ws.onclose = (event) => {
|
|
142
|
+
this.logger.log("info", `WebSocket closed: ${event.code} - ${event.reason}`);
|
|
143
|
+
this.stopPing();
|
|
144
|
+
onClose(event.code, event.reason);
|
|
145
|
+
this.ws = null;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
sendAck(messageId) {
|
|
149
|
+
if (!this.isConnected()) {
|
|
150
|
+
this.logger.log("warn", `Cannot send ACK (not connected): ${messageId}`);
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
// Parse UUID string to bytes (16 bytes)
|
|
155
|
+
const uuid = new Uint8Array(parseUuid(messageId));
|
|
156
|
+
this.ws.send(uuid);
|
|
157
|
+
this.logger.log("debug", `Sent ACK: ${messageId}`);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
this.logger.log("error", `Failed to send ACK for ${messageId}:`, error);
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
close(code = 1000 /* CloseCode.NORMAL */, reason = "Client disconnecting") {
|
|
166
|
+
this.stopPing();
|
|
167
|
+
if (this.ws) {
|
|
168
|
+
try {
|
|
169
|
+
if (this.ws.readyState === WebSocket.OPEN) {
|
|
170
|
+
this.ws.close(code, reason);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
this.logger.log("error", "Error closing WebSocket:", error);
|
|
175
|
+
}
|
|
176
|
+
this.ws = null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
isConnected() {
|
|
180
|
+
return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
|
|
181
|
+
}
|
|
182
|
+
startPing() {
|
|
183
|
+
this.stopPing();
|
|
184
|
+
// Send ping every 30 seconds to keep connection alive
|
|
185
|
+
this.pingTimer = setInterval(() => {
|
|
186
|
+
if (this.isConnected()) {
|
|
187
|
+
try {
|
|
188
|
+
this.logger.log("debug", "Connection still active");
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
this.logger.log("error", "Failed to check connection:", error);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}, this.PING_INTERVAL);
|
|
195
|
+
}
|
|
196
|
+
stopPing() {
|
|
197
|
+
if (this.pingTimer) {
|
|
198
|
+
clearInterval(this.pingTimer);
|
|
199
|
+
this.pingTimer = null;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Message processor for handling incoming WebSocket messages
|
|
204
|
+
class MessageProcessor {
|
|
205
|
+
constructor(logger, handlers) {
|
|
206
|
+
this.logger = logger;
|
|
207
|
+
this.handlers = handlers;
|
|
208
|
+
}
|
|
209
|
+
process(data) {
|
|
210
|
+
try {
|
|
211
|
+
const message = fromBinary(WebsocketMessageSchema, new Uint8Array(data));
|
|
212
|
+
this.logger.log("debug", `Processing message: ${message.id}`);
|
|
213
|
+
// Process based on message type
|
|
214
|
+
switch (message.message.case) {
|
|
215
|
+
case "output":
|
|
216
|
+
this.processOutput(message.message.value);
|
|
217
|
+
break;
|
|
218
|
+
case "session":
|
|
219
|
+
this.processSession(message.message.value);
|
|
220
|
+
break;
|
|
221
|
+
case "url":
|
|
222
|
+
this.processUrl(message.message.value);
|
|
223
|
+
break;
|
|
224
|
+
default:
|
|
225
|
+
this.logger.log("warn", `Unknown message type: ${message.message.case}`);
|
|
226
|
+
}
|
|
227
|
+
return message.id;
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
this.logger.log("error", "Failed to process message:", error);
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
processOutput(output) {
|
|
235
|
+
if (!this.handlers.onOutput)
|
|
236
|
+
return;
|
|
237
|
+
try {
|
|
238
|
+
this.handlers.onOutput({
|
|
239
|
+
vertex: output.vertex,
|
|
240
|
+
fork: output.fork,
|
|
241
|
+
data: this.parseOutputData(output.data),
|
|
242
|
+
created: output.created ? timestampDate(output.created) : undefined,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
this.logger.log("error", "Error in output handler:", error);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
processSession(session) {
|
|
250
|
+
if (!this.handlers.onSession)
|
|
251
|
+
return;
|
|
252
|
+
try {
|
|
253
|
+
this.handlers.onSession(toJson(SessionSchema, session));
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
this.logger.log("error", "Error in session handler:", error);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
processUrl(url) {
|
|
260
|
+
if (!this.handlers.onUrl)
|
|
261
|
+
return;
|
|
262
|
+
try {
|
|
263
|
+
this.handlers.onUrl(toJson(UrlSchema, url));
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
this.logger.log("error", "Error in URL handler:", error);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
parseOutputData(data) {
|
|
270
|
+
return Object.fromEntries(Object.entries(data).map(([key, value]) => {
|
|
271
|
+
try {
|
|
272
|
+
return [key, JSON.parse(new TextDecoder().decode(value))];
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
this.logger.log("error", `Failed to parse data for key ${key}:`, error);
|
|
276
|
+
return [key, null];
|
|
277
|
+
}
|
|
278
|
+
}));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Main PubsubClient class
|
|
282
|
+
export class PubsubClient {
|
|
283
|
+
constructor(debug = false) {
|
|
284
|
+
this.state = ConnectionState.DISCONNECTED;
|
|
285
|
+
this.sessionConfig = null;
|
|
286
|
+
this.messageProcessor = null;
|
|
287
|
+
this.shouldReconnect = true;
|
|
288
|
+
this.sessionComplete = false;
|
|
289
|
+
this.logger = new Logger(debug);
|
|
290
|
+
this.ackTracker = new AckTracker(this.logger);
|
|
291
|
+
this.reconnectManager = new ReconnectionManager(this.logger);
|
|
292
|
+
this.wsManager = new WebSocketManager(this.logger);
|
|
293
|
+
}
|
|
294
|
+
async subscribe(opts) {
|
|
295
|
+
this.logger.log("debug", "Subscribe called", {
|
|
296
|
+
automation: opts.automation,
|
|
297
|
+
hasToken: !!opts.sessionToken,
|
|
298
|
+
});
|
|
299
|
+
// Validate input
|
|
300
|
+
if (!opts.sessionToken || !opts.automation) {
|
|
301
|
+
throw new Error("Session token and automation are required");
|
|
302
|
+
}
|
|
303
|
+
// Check if already connected to same session
|
|
304
|
+
if (this.isSameSession(opts)) {
|
|
305
|
+
this.logger.log("debug", "Already connected to same session, updating handlers");
|
|
306
|
+
this.updateHandlers(opts);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
// Check state
|
|
310
|
+
if (this.state === ConnectionState.CONNECTING) {
|
|
311
|
+
throw new Error("Already connecting, please wait");
|
|
312
|
+
}
|
|
313
|
+
// Disconnect if connected to different session
|
|
314
|
+
if (this.state === ConnectionState.CONNECTED) {
|
|
315
|
+
await this.unsubscribe();
|
|
316
|
+
}
|
|
317
|
+
// Store configuration
|
|
318
|
+
this.sessionConfig = {
|
|
319
|
+
token: opts.sessionToken,
|
|
320
|
+
automation: opts.automation,
|
|
321
|
+
};
|
|
322
|
+
// Create message processor with handlers
|
|
323
|
+
this.messageProcessor = new MessageProcessor(this.logger, {
|
|
324
|
+
onOutput: opts.onOutput,
|
|
325
|
+
onSession: opts.onSession,
|
|
326
|
+
onUrl: opts.onUrl,
|
|
327
|
+
});
|
|
328
|
+
// Reset state
|
|
329
|
+
this.shouldReconnect = true;
|
|
330
|
+
this.sessionComplete = false;
|
|
331
|
+
this.reconnectManager.reset();
|
|
332
|
+
// Start ACK tracker
|
|
333
|
+
this.ackTracker.start();
|
|
334
|
+
// Connect
|
|
335
|
+
await this.connect();
|
|
336
|
+
}
|
|
337
|
+
async unsubscribe() {
|
|
338
|
+
if (this.state === ConnectionState.DISCONNECTED ||
|
|
339
|
+
this.state === ConnectionState.CLOSING) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
this.logger.log("info", "Unsubscribing...");
|
|
343
|
+
// Update state
|
|
344
|
+
this.state = ConnectionState.CLOSING;
|
|
345
|
+
this.shouldReconnect = false;
|
|
346
|
+
// Cancel any pending reconnects
|
|
347
|
+
this.reconnectManager.cancel();
|
|
348
|
+
// Close WebSocket
|
|
349
|
+
this.wsManager.close();
|
|
350
|
+
// Stop ACK tracker
|
|
351
|
+
this.ackTracker.stop();
|
|
352
|
+
// Clear state
|
|
353
|
+
this.sessionConfig = null;
|
|
354
|
+
this.messageProcessor = null;
|
|
355
|
+
this.state = ConnectionState.DISCONNECTED;
|
|
356
|
+
this.logger.log("info", "Unsubscribed successfully");
|
|
357
|
+
}
|
|
358
|
+
isConnected() {
|
|
359
|
+
return this.state === ConnectionState.CONNECTED;
|
|
360
|
+
}
|
|
361
|
+
getConnectionState() {
|
|
362
|
+
return this.state;
|
|
363
|
+
}
|
|
364
|
+
async connect() {
|
|
365
|
+
if (!this.sessionConfig) {
|
|
366
|
+
throw new Error("No session configuration");
|
|
367
|
+
}
|
|
368
|
+
this.state = ConnectionState.CONNECTING;
|
|
369
|
+
const config = getConfig();
|
|
370
|
+
const { token, automation } = this.sessionConfig;
|
|
371
|
+
const wsUrl = `${config.wsBaseUrl}/${automation.organization}/${automation.group}/${automation.automation}/ws?token=${encodeURIComponent(token)}`;
|
|
372
|
+
try {
|
|
373
|
+
this.wsManager.connect(wsUrl, () => this.handleOpen(), (data) => this.handleMessage(data), (code, reason) => this.handleClose(code, reason), (error) => this.handleError(error));
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
this.state = ConnectionState.DISCONNECTED;
|
|
377
|
+
throw error;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
handleOpen() {
|
|
381
|
+
this.state = ConnectionState.CONNECTED;
|
|
382
|
+
this.reconnectManager.reset();
|
|
383
|
+
}
|
|
384
|
+
handleMessage(data) {
|
|
385
|
+
if (!this.messageProcessor) {
|
|
386
|
+
this.logger.log("error", "No message processor configured");
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
// Process the message
|
|
390
|
+
const messageId = this.messageProcessor.process(data);
|
|
391
|
+
if (!messageId) {
|
|
392
|
+
return; // Failed to parse
|
|
393
|
+
}
|
|
394
|
+
// Check for duplicate
|
|
395
|
+
if (this.ackTracker.isProcessed(messageId)) {
|
|
396
|
+
this.logger.log("debug", `Duplicate message: ${messageId}`);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
this.ackTracker.markProcessed(messageId);
|
|
400
|
+
}
|
|
401
|
+
// Always ACK (even for duplicates)
|
|
402
|
+
this.wsManager.sendAck(messageId);
|
|
403
|
+
}
|
|
404
|
+
handleClose(code, reason) {
|
|
405
|
+
this.state = ConnectionState.DISCONNECTED;
|
|
406
|
+
// Analyze close code
|
|
407
|
+
const shouldReconnect = this.analyzeCloseCode(code, reason);
|
|
408
|
+
// Schedule reconnect if appropriate
|
|
409
|
+
if (shouldReconnect && this.shouldReconnect && !this.sessionComplete) {
|
|
410
|
+
this.scheduleReconnect();
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
// Clean shutdown
|
|
414
|
+
this.cleanup();
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
handleError(error) {
|
|
418
|
+
this.logger.log("error", "WebSocket error:", error);
|
|
419
|
+
}
|
|
420
|
+
analyzeCloseCode(code, reason) {
|
|
421
|
+
switch (code) {
|
|
422
|
+
case 1000 /* CloseCode.NORMAL */:
|
|
423
|
+
// Normal closure - session complete or client requested
|
|
424
|
+
this.logger.log("info", "Normal closure");
|
|
425
|
+
this.sessionComplete = true;
|
|
426
|
+
return false;
|
|
427
|
+
case 1001 /* CloseCode.GOING_AWAY */:
|
|
428
|
+
// Server shutting down
|
|
429
|
+
this.logger.log("warn", "Server going away");
|
|
430
|
+
return true;
|
|
431
|
+
case 1002 /* CloseCode.PROTOCOL_ERROR */:
|
|
432
|
+
case 1003 /* CloseCode.UNSUPPORTED_DATA */:
|
|
433
|
+
case 1008 /* CloseCode.POLICY_VIOLATION */:
|
|
434
|
+
// Critical errors - don't reconnect
|
|
435
|
+
this.logger.log("error", `Critical error (${code}): ${reason}`);
|
|
436
|
+
return false;
|
|
437
|
+
case 1006 /* CloseCode.ABNORMAL */:
|
|
438
|
+
// Connection lost - try to reconnect
|
|
439
|
+
this.logger.log("warn", "Connection lost (abnormal closure)");
|
|
440
|
+
return true;
|
|
441
|
+
default:
|
|
442
|
+
// Unknown code - try to reconnect
|
|
443
|
+
this.logger.log("warn", `Unknown close code ${code}: ${reason}`);
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
scheduleReconnect() {
|
|
448
|
+
const scheduled = this.reconnectManager.scheduleReconnect(() => {
|
|
449
|
+
if (this.shouldReconnect && this.state === ConnectionState.DISCONNECTED) {
|
|
450
|
+
this.connect().catch((error) => {
|
|
451
|
+
this.logger.log("error", "Reconnection failed:", error);
|
|
452
|
+
// Try again
|
|
453
|
+
this.scheduleReconnect();
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
if (!scheduled) {
|
|
458
|
+
// Max attempts reached
|
|
459
|
+
this.cleanup();
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
cleanup() {
|
|
463
|
+
this.shouldReconnect = false;
|
|
464
|
+
this.reconnectManager.cancel();
|
|
465
|
+
this.ackTracker.stop();
|
|
466
|
+
this.wsManager.close();
|
|
467
|
+
this.sessionConfig = null;
|
|
468
|
+
this.messageProcessor = null;
|
|
469
|
+
this.state = ConnectionState.DISCONNECTED;
|
|
470
|
+
}
|
|
471
|
+
isSameSession(opts) {
|
|
472
|
+
if (!this.sessionConfig || this.state !== ConnectionState.CONNECTED) {
|
|
473
|
+
return false;
|
|
474
|
+
}
|
|
475
|
+
return (this.sessionConfig.token === opts.sessionToken &&
|
|
476
|
+
this.sessionConfig.automation.organization ===
|
|
477
|
+
opts.automation.organization &&
|
|
478
|
+
this.sessionConfig.automation.group === opts.automation.group &&
|
|
479
|
+
this.sessionConfig.automation.automation === opts.automation.automation);
|
|
480
|
+
}
|
|
481
|
+
updateHandlers(opts) {
|
|
482
|
+
if (!this.messageProcessor) {
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
// Update handlers in message processor
|
|
486
|
+
this.messageProcessor = new MessageProcessor(this.logger, {
|
|
487
|
+
onOutput: opts.onOutput,
|
|
488
|
+
onSession: opts.onSession,
|
|
489
|
+
onUrl: opts.onUrl,
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
//# sourceMappingURL=pubsub-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubsub-client.js","sourceRoot":"","sources":["../../src/pubsub-client.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AutomationIdJson, GetSessionResponseJson, InheritSessionResponseJson, ReadOutputResponseJson, ReadUrlsResponseJson, SessionJson, StartSessionRequestJson, StartSessionResponseJson, UrlJson } from "./genproto/mochabugapis/adapt/automations/v1/automations_pb.js";
|
|
1
|
+
import { AutomationIdJson, GetSessionResponseJson, InheritSessionResponseJson, ReadOutputResponseJson, ReadUrlsResponseJson, StartSessionRequestJson, StartSessionResponseJson } from "./genproto/mochabugapis/adapt/automations/v1/automations_pb.js";
|
|
3
2
|
export interface AdaptConfig {
|
|
4
3
|
baseUrl: string;
|
|
5
4
|
wsBaseUrl: string;
|
|
@@ -19,54 +18,4 @@ export declare class RestClientError extends Error {
|
|
|
19
18
|
response: Response;
|
|
20
19
|
constructor(response: Response);
|
|
21
20
|
}
|
|
22
|
-
export
|
|
23
|
-
vertex: string;
|
|
24
|
-
fork: string;
|
|
25
|
-
data: {
|
|
26
|
-
[key: string]: ValueJson;
|
|
27
|
-
};
|
|
28
|
-
created?: Date;
|
|
29
|
-
}
|
|
30
|
-
export type SubscriptionOptions = {
|
|
31
|
-
sessionToken: string;
|
|
32
|
-
automation: AutomationIdJson;
|
|
33
|
-
onOutput?: (output: Output) => void;
|
|
34
|
-
onSession?: (session: SessionJson) => void;
|
|
35
|
-
onUrl?: (url: UrlJson) => void;
|
|
36
|
-
debug?: boolean;
|
|
37
|
-
};
|
|
38
|
-
declare enum ConnectionState {
|
|
39
|
-
DISCONNECTED = "disconnected",
|
|
40
|
-
CONNECTING = "connecting",
|
|
41
|
-
CONNECTED = "connected",
|
|
42
|
-
CLOSING = "closing"
|
|
43
|
-
}
|
|
44
|
-
export declare class PubsubClient {
|
|
45
|
-
private ws;
|
|
46
|
-
private sessionToken;
|
|
47
|
-
private automation;
|
|
48
|
-
private outputHandler;
|
|
49
|
-
private sessionHandler;
|
|
50
|
-
private urlHandler;
|
|
51
|
-
private connectionState;
|
|
52
|
-
private debug;
|
|
53
|
-
private reconnectAttempts;
|
|
54
|
-
private maxReconnectAttempts;
|
|
55
|
-
private reconnectTimeWait;
|
|
56
|
-
private maxReconnectTimeWait;
|
|
57
|
-
private shouldReconnect;
|
|
58
|
-
private ackedMessages;
|
|
59
|
-
constructor(debug?: boolean);
|
|
60
|
-
private log;
|
|
61
|
-
subscribe(opts: SubscriptionOptions): Promise<void>;
|
|
62
|
-
private connect;
|
|
63
|
-
private scheduleReconnect;
|
|
64
|
-
private handleMessage;
|
|
65
|
-
private sendAck;
|
|
66
|
-
private cleanupOldAckedMessages;
|
|
67
|
-
private cleanupState;
|
|
68
|
-
unsubscribe(): Promise<void>;
|
|
69
|
-
isConnected(): boolean;
|
|
70
|
-
getConnectionState(): ConnectionState;
|
|
71
|
-
}
|
|
72
|
-
export {};
|
|
21
|
+
export { PubsubClient, ConnectionState, Output, SubscriptionOptions, } from "./pubsub-client.js";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ValueJson } from "@bufbuild/protobuf/wkt";
|
|
2
|
+
import { AutomationIdJson, SessionJson, UrlJson } from "./genproto/mochabugapis/adapt/automations/v1/automations_pb.js";
|
|
3
|
+
export interface Output {
|
|
4
|
+
vertex: string;
|
|
5
|
+
fork: string;
|
|
6
|
+
data: {
|
|
7
|
+
[key: string]: ValueJson;
|
|
8
|
+
};
|
|
9
|
+
created?: Date;
|
|
10
|
+
}
|
|
11
|
+
export interface MessageHandlers {
|
|
12
|
+
onOutput?: (output: Output) => void;
|
|
13
|
+
onSession?: (session: SessionJson) => void;
|
|
14
|
+
onUrl?: (url: UrlJson) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface SubscriptionOptions extends MessageHandlers {
|
|
17
|
+
sessionToken: string;
|
|
18
|
+
automation: AutomationIdJson;
|
|
19
|
+
debug?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare enum ConnectionState {
|
|
22
|
+
DISCONNECTED = "disconnected",
|
|
23
|
+
CONNECTING = "connecting",
|
|
24
|
+
CONNECTED = "connected",
|
|
25
|
+
CLOSING = "closing"
|
|
26
|
+
}
|
|
27
|
+
export declare class PubsubClient {
|
|
28
|
+
private state;
|
|
29
|
+
private sessionConfig;
|
|
30
|
+
private readonly logger;
|
|
31
|
+
private readonly ackTracker;
|
|
32
|
+
private readonly reconnectManager;
|
|
33
|
+
private readonly wsManager;
|
|
34
|
+
private messageProcessor;
|
|
35
|
+
private shouldReconnect;
|
|
36
|
+
private sessionComplete;
|
|
37
|
+
constructor(debug?: boolean);
|
|
38
|
+
subscribe(opts: SubscriptionOptions): Promise<void>;
|
|
39
|
+
unsubscribe(): Promise<void>;
|
|
40
|
+
isConnected(): boolean;
|
|
41
|
+
getConnectionState(): ConnectionState;
|
|
42
|
+
private connect;
|
|
43
|
+
private handleOpen;
|
|
44
|
+
private handleMessage;
|
|
45
|
+
private handleClose;
|
|
46
|
+
private handleError;
|
|
47
|
+
private analyzeCloseCode;
|
|
48
|
+
private scheduleReconnect;
|
|
49
|
+
private cleanup;
|
|
50
|
+
private isSameSession;
|
|
51
|
+
private updateHandlers;
|
|
52
|
+
}
|
package/package.json
CHANGED