@leverageaiapps/locus-dev 1.1.3

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.
Files changed (58) hide show
  1. package/Dockerfile +29 -0
  2. package/LICENSE +21 -0
  3. package/README.md +153 -0
  4. package/dist/capture.d.ts +3 -0
  5. package/dist/capture.d.ts.map +1 -0
  6. package/dist/capture.js +134 -0
  7. package/dist/capture.js.map +1 -0
  8. package/dist/config.d.ts +7 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +84 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/context-extractor.d.ts +17 -0
  13. package/dist/context-extractor.d.ts.map +1 -0
  14. package/dist/context-extractor.js +118 -0
  15. package/dist/context-extractor.js.map +1 -0
  16. package/dist/debug-logger.d.ts +19 -0
  17. package/dist/debug-logger.d.ts.map +1 -0
  18. package/dist/debug-logger.js +48 -0
  19. package/dist/debug-logger.js.map +1 -0
  20. package/dist/exec.d.ts +20 -0
  21. package/dist/exec.d.ts.map +1 -0
  22. package/dist/exec.js +158 -0
  23. package/dist/exec.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +83 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/pty.d.ts +7 -0
  29. package/dist/pty.d.ts.map +1 -0
  30. package/dist/pty.js +27 -0
  31. package/dist/pty.js.map +1 -0
  32. package/dist/relay.d.ts +5 -0
  33. package/dist/relay.d.ts.map +1 -0
  34. package/dist/relay.js +131 -0
  35. package/dist/relay.js.map +1 -0
  36. package/dist/session.d.ts +6 -0
  37. package/dist/session.d.ts.map +1 -0
  38. package/dist/session.js +250 -0
  39. package/dist/session.js.map +1 -0
  40. package/dist/voice-recognition-modelscope.d.ts +50 -0
  41. package/dist/voice-recognition-modelscope.d.ts.map +1 -0
  42. package/dist/voice-recognition-modelscope.js +171 -0
  43. package/dist/voice-recognition-modelscope.js.map +1 -0
  44. package/dist/vortex-tunnel.d.ts +9 -0
  45. package/dist/vortex-tunnel.d.ts.map +1 -0
  46. package/dist/vortex-tunnel.js +589 -0
  47. package/dist/vortex-tunnel.js.map +1 -0
  48. package/dist/web-server.d.ts +6 -0
  49. package/dist/web-server.d.ts.map +1 -0
  50. package/dist/web-server.js +2096 -0
  51. package/dist/web-server.js.map +1 -0
  52. package/docs/CNAME +1 -0
  53. package/docs/index.html +492 -0
  54. package/docs/install.sh +329 -0
  55. package/install.sh +329 -0
  56. package/package.json +69 -0
  57. package/scripts/postinstall.js +66 -0
  58. package/scripts/verify-install.js +128 -0
@@ -0,0 +1,589 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.startTunnel = startTunnel;
40
+ exports.stopTunnel = stopTunnel;
41
+ exports.getTunnelUrl = getTunnelUrl;
42
+ exports.isTunnelRunning = isTunnelRunning;
43
+ const axios_1 = __importDefault(require("axios"));
44
+ const ws_1 = __importDefault(require("ws"));
45
+ const http = __importStar(require("http"));
46
+ let tunnelWs = null;
47
+ let tunnelUrl = null;
48
+ let sessionId = null;
49
+ let gatewayUrl = null;
50
+ let localPort = null;
51
+ let heartbeatInterval = null;
52
+ let isReconnecting = false;
53
+ let reconnectAttempts = 0;
54
+ // Heartbeat configuration
55
+ const HEARTBEAT_INTERVAL_MS = 20 * 1000; // Send heartbeat every 20 seconds
56
+ const MAX_RECONNECT_ATTEMPTS = 100; // Max reconnect attempts (essentially unlimited for home use)
57
+ const MAX_RECONNECT_DELAY_MS = 60 * 1000; // Max 60 seconds between reconnect attempts
58
+ const MAX_PAYLOAD_SIZE = 64 * 1024 * 1024; // 64MB max message size for large file transfer
59
+ // Map to store pending HTTP requests
60
+ const pendingRequests = new Map();
61
+ // Single shared WebSocket connection to local server
62
+ let sharedLocalWs = null;
63
+ let sharedLocalWsReady = false;
64
+ /**
65
+ * Start Vortex tunnel
66
+ * Creates a session with the gateway and establishes WebSocket connection
67
+ */
68
+ function startTunnel(port = 4020, gateway) {
69
+ return new Promise(async (resolve, reject) => {
70
+ try {
71
+ localPort = port;
72
+ gatewayUrl = gateway || process.env.VORTEX_GATEWAY || 'https://vortex.futuretech.social';
73
+ console.log(` [Vortex] Connecting to gateway: ${gatewayUrl}`);
74
+ // Step 1: Create session on gateway (v2 API)
75
+ const response = await axios_1.default.post(`${gatewayUrl}/api/session`, {
76
+ mode: 'http_proxy',
77
+ client_type: `LeverageAI-Agent/${process.platform}`
78
+ });
79
+ const { session_id, url, tunnel_url: sessionUrl, ws_url, expires_in } = response.data;
80
+ sessionId = session_id;
81
+ tunnelUrl = url;
82
+ console.log(` [Vortex] Session created: ${session_id.substring(0, 8)}...`);
83
+ console.log(` [Vortex] Session expires in: ${expires_in}s`);
84
+ // Step 2: Register tunnel with gateway
85
+ await axios_1.default.post(`${gatewayUrl}/api/tunnel/register`, {
86
+ session_id: session_id,
87
+ });
88
+ // Step 3: Connect WebSocket to gateway
89
+ const wsUrl = gatewayUrl.replace('https://', 'wss://').replace('http://', 'ws://') + `/tunnel/${session_id}`;
90
+ console.log(` [Vortex] Establishing WebSocket tunnel...`);
91
+ tunnelWs = new ws_1.default(wsUrl, {
92
+ maxPayload: MAX_PAYLOAD_SIZE
93
+ });
94
+ tunnelWs.on('open', () => {
95
+ console.log(` [Vortex] Tunnel connected`);
96
+ startHeartbeat();
97
+ // Create shared local WebSocket connection
98
+ createSharedLocalConnection();
99
+ resolve(tunnelUrl);
100
+ });
101
+ tunnelWs.on('message', (data) => {
102
+ try {
103
+ const msg = JSON.parse(data.toString());
104
+ handleGatewayMessage(msg);
105
+ }
106
+ catch (e) {
107
+ // Not JSON, might be binary data
108
+ console.error('[Vortex] Invalid message from gateway:', e);
109
+ }
110
+ });
111
+ tunnelWs.on('close', () => {
112
+ console.log(' [Vortex] Tunnel disconnected');
113
+ stopHeartbeat();
114
+ tunnelWs = null;
115
+ // Auto reconnect instead of cleanup
116
+ if (!isReconnecting && sessionId && gatewayUrl) {
117
+ attemptTunnelReconnect();
118
+ }
119
+ });
120
+ tunnelWs.on('error', (err) => {
121
+ console.error(' [Vortex] Tunnel error:', err.message);
122
+ reject(err);
123
+ });
124
+ }
125
+ catch (error) {
126
+ console.error(' [Vortex] Failed to start tunnel:', error.message);
127
+ if (error.response) {
128
+ console.error(' [Vortex] Response:', error.response.data);
129
+ }
130
+ reject(error);
131
+ }
132
+ });
133
+ }
134
+ /**
135
+ * Create shared WebSocket connection to local server
136
+ * This connection is reused for all browser clients
137
+ */
138
+ function createSharedLocalConnection() {
139
+ if (!localPort)
140
+ return;
141
+ if (sharedLocalWs && sharedLocalWs.readyState === ws_1.default.OPEN) {
142
+ return; // Already connected
143
+ }
144
+ console.log(` [Vortex] Creating shared local WebSocket connection to port ${localPort}...`);
145
+ sharedLocalWs = new ws_1.default(`ws://localhost:${localPort}/ws`, {
146
+ maxPayload: MAX_PAYLOAD_SIZE
147
+ });
148
+ sharedLocalWs.on('open', () => {
149
+ console.log(` [Vortex] Shared local WebSocket connected`);
150
+ sharedLocalWsReady = true;
151
+ });
152
+ sharedLocalWs.on('message', (data) => {
153
+ // Forward data from local server to all browsers through gateway
154
+ if (tunnelWs && tunnelWs.readyState === ws_1.default.OPEN) {
155
+ // Local server sends JSON text, forward it directly
156
+ const dataStr = Buffer.isBuffer(data) ? data.toString() : data.toString();
157
+ tunnelWs.send(dataStr);
158
+ }
159
+ });
160
+ sharedLocalWs.on('close', () => {
161
+ console.log(` [Vortex] Shared local WebSocket closed`);
162
+ sharedLocalWsReady = false;
163
+ sharedLocalWs = null;
164
+ // Exponential backoff reconnect
165
+ let retryCount = 0;
166
+ const maxRetries = 10;
167
+ const attemptReconnect = () => {
168
+ if (retryCount >= maxRetries) {
169
+ console.log(` [Vortex] Max local reconnect attempts reached`);
170
+ return;
171
+ }
172
+ retryCount++;
173
+ const delay = Math.min(Math.pow(2, retryCount) * 1000, 30000);
174
+ console.log(` [Vortex] Local reconnect attempt ${retryCount}/${maxRetries} in ${delay / 1000}s...`);
175
+ setTimeout(() => {
176
+ if (tunnelWs && tunnelWs.readyState === ws_1.default.OPEN) {
177
+ createSharedLocalConnection();
178
+ // Check if reconnect succeeded after a short delay
179
+ setTimeout(() => {
180
+ if (!sharedLocalWsReady && retryCount < maxRetries) {
181
+ attemptReconnect();
182
+ }
183
+ }, 2000);
184
+ }
185
+ }, delay);
186
+ };
187
+ attemptReconnect();
188
+ });
189
+ sharedLocalWs.on('error', (err) => {
190
+ console.error(` [Vortex] Shared local WebSocket error:`, err.message);
191
+ sharedLocalWsReady = false;
192
+ });
193
+ }
194
+ // Map of WebSocket connections (for backward compatibility)
195
+ const websocketConnections = new Map();
196
+ /**
197
+ * Handle messages from the gateway
198
+ */
199
+ function handleGatewayMessage(msg) {
200
+ switch (msg.type) {
201
+ case 'http_request':
202
+ // Gateway forwarded an HTTP request from browser
203
+ handleHttpRequest(msg);
204
+ break;
205
+ case 'websocket_connect':
206
+ // New WebSocket connection from browser (legacy protocol)
207
+ handleWebSocketConnect(msg.conn_id);
208
+ break;
209
+ case 'websocket_message':
210
+ // WebSocket message from browser (legacy protocol)
211
+ handleWebSocketMessage(msg.conn_id, msg.data);
212
+ break;
213
+ case 'websocket_binary':
214
+ // WebSocket binary data from browser (legacy protocol)
215
+ handleWebSocketBinary(msg.conn_id, msg.data);
216
+ break;
217
+ case 'websocket_disconnect':
218
+ // WebSocket disconnection from browser (legacy protocol)
219
+ handleWebSocketDisconnect(msg.conn_id);
220
+ break;
221
+ case 'client_connected':
222
+ // New browser client connected (v2 protocol)
223
+ console.log(` [Vortex] Client connected`);
224
+ // Ensure shared local connection is ready
225
+ if (!sharedLocalWsReady) {
226
+ createSharedLocalConnection();
227
+ }
228
+ break;
229
+ case 'client_disconnected':
230
+ console.log(` [Vortex] Client disconnected`);
231
+ break;
232
+ case 'pong':
233
+ // Heartbeat response received, connection is alive
234
+ break;
235
+ default:
236
+ // Forward any other message to local server (v2 protocol - direct relay)
237
+ // This handles input, resize, ping, etc. from browser
238
+ if (sharedLocalWs && sharedLocalWs.readyState === ws_1.default.OPEN) {
239
+ sharedLocalWs.send(JSON.stringify(msg));
240
+ }
241
+ break;
242
+ }
243
+ }
244
+ /**
245
+ * Handle HTTP request forwarded from gateway
246
+ * Forward it to the local server and send response back
247
+ */
248
+ async function handleHttpRequest(msg) {
249
+ const { request_id, method, path, headers, body } = msg;
250
+ if (!localPort) {
251
+ sendToGateway({
252
+ type: 'http_response',
253
+ request_id,
254
+ status: 503,
255
+ headers: { 'Content-Type': 'text/plain' },
256
+ body: 'Local server not configured'
257
+ });
258
+ return;
259
+ }
260
+ try {
261
+ // Remove host header to avoid conflicts
262
+ const requestHeaders = { ...headers };
263
+ delete requestHeaders.host;
264
+ delete requestHeaders.Host;
265
+ // Make request to local server
266
+ const options = {
267
+ hostname: 'localhost',
268
+ port: localPort,
269
+ path: path,
270
+ method: method,
271
+ headers: requestHeaders
272
+ };
273
+ const localReq = http.request(options, (localRes) => {
274
+ const chunks = [];
275
+ localRes.on('data', (chunk) => {
276
+ chunks.push(chunk);
277
+ });
278
+ localRes.on('end', () => {
279
+ const responseBody = Buffer.concat(chunks);
280
+ // Send response back to gateway
281
+ sendToGateway({
282
+ type: 'http_response',
283
+ request_id,
284
+ status: localRes.statusCode || 200,
285
+ headers: localRes.headers,
286
+ body: responseBody.toString('base64'),
287
+ encoding: 'base64'
288
+ });
289
+ });
290
+ });
291
+ localReq.on('error', (err) => {
292
+ console.error('[Vortex] Local request error:', err.message);
293
+ sendToGateway({
294
+ type: 'http_response',
295
+ request_id,
296
+ status: 502,
297
+ headers: { 'Content-Type': 'text/plain' },
298
+ body: `Failed to connect to local server: ${err.message}`
299
+ });
300
+ });
301
+ // Send request body if present
302
+ if (body) {
303
+ // Decode base64 body if encoded
304
+ const bodyBuffer = msg.encoding === 'base64' ? Buffer.from(body, 'base64') : body;
305
+ localReq.write(bodyBuffer);
306
+ }
307
+ localReq.end();
308
+ }
309
+ catch (error) {
310
+ sendToGateway({
311
+ type: 'http_response',
312
+ request_id,
313
+ status: 500,
314
+ headers: { 'Content-Type': 'text/plain' },
315
+ body: `Internal error: ${error.message}`
316
+ });
317
+ }
318
+ }
319
+ /**
320
+ * Handle new WebSocket connection (legacy protocol)
321
+ */
322
+ function handleWebSocketConnect(connId) {
323
+ if (!localPort) {
324
+ sendToGateway({
325
+ type: 'websocket_close',
326
+ conn_id: connId
327
+ });
328
+ return;
329
+ }
330
+ // Create WebSocket connection to local server
331
+ const localWs = new ws_1.default(`ws://localhost:${localPort}/ws`, {
332
+ maxPayload: MAX_PAYLOAD_SIZE
333
+ });
334
+ localWs.on('open', () => {
335
+ console.log(`[Vortex] Local WebSocket connected for ${connId.substring(0, 8)}...`);
336
+ websocketConnections.set(connId, localWs);
337
+ });
338
+ localWs.on('message', (data) => {
339
+ // Forward data from local server to browser through gateway
340
+ // Local server sends JSON text, we need to preserve it
341
+ if (Buffer.isBuffer(data)) {
342
+ sendToGateway({
343
+ type: 'websocket_data',
344
+ conn_id: connId,
345
+ data: data.toString('base64'),
346
+ binary: true
347
+ });
348
+ }
349
+ else {
350
+ // data is already a string (JSON), send it as-is
351
+ sendToGateway({
352
+ type: 'websocket_data',
353
+ conn_id: connId,
354
+ data: data.toString(),
355
+ binary: false
356
+ });
357
+ }
358
+ });
359
+ localWs.on('close', () => {
360
+ console.log(`[Vortex] Local WebSocket closed for ${connId.substring(0, 8)}...`);
361
+ websocketConnections.delete(connId);
362
+ sendToGateway({
363
+ type: 'websocket_close',
364
+ conn_id: connId
365
+ });
366
+ });
367
+ localWs.on('error', (err) => {
368
+ console.error(`[Vortex] Local WebSocket error for ${connId.substring(0, 8)}...`, err.message);
369
+ websocketConnections.delete(connId);
370
+ sendToGateway({
371
+ type: 'websocket_close',
372
+ conn_id: connId
373
+ });
374
+ });
375
+ }
376
+ /**
377
+ * Handle WebSocket message from browser (legacy protocol)
378
+ */
379
+ function handleWebSocketMessage(connId, data) {
380
+ const localWs = websocketConnections.get(connId);
381
+ if (localWs && localWs.readyState === ws_1.default.OPEN) {
382
+ localWs.send(data);
383
+ }
384
+ }
385
+ /**
386
+ * Handle WebSocket binary data from browser (legacy protocol)
387
+ */
388
+ function handleWebSocketBinary(connId, data) {
389
+ const localWs = websocketConnections.get(connId);
390
+ if (localWs && localWs.readyState === ws_1.default.OPEN) {
391
+ // Decode base64 and send as binary
392
+ const buffer = Buffer.from(data, 'base64');
393
+ localWs.send(buffer);
394
+ }
395
+ }
396
+ /**
397
+ * Handle WebSocket disconnection from browser (legacy protocol)
398
+ */
399
+ function handleWebSocketDisconnect(connId) {
400
+ const localWs = websocketConnections.get(connId);
401
+ if (localWs) {
402
+ localWs.close();
403
+ websocketConnections.delete(connId);
404
+ console.log(`[Vortex] WebSocket disconnected for ${connId.substring(0, 8)}...`);
405
+ }
406
+ }
407
+ /**
408
+ * Send message to gateway
409
+ */
410
+ function sendToGateway(msg) {
411
+ if (tunnelWs && tunnelWs.readyState === ws_1.default.OPEN) {
412
+ tunnelWs.send(JSON.stringify(msg));
413
+ }
414
+ }
415
+ /**
416
+ * Start heartbeat to keep connection alive
417
+ * Sends ping every 30 seconds to prevent 5-minute timeout
418
+ */
419
+ function startHeartbeat() {
420
+ stopHeartbeat(); // Clear any existing heartbeat
421
+ heartbeatInterval = setInterval(() => {
422
+ if (tunnelWs && tunnelWs.readyState === ws_1.default.OPEN) {
423
+ sendToGateway({ type: 'ping', timestamp: Date.now() });
424
+ }
425
+ }, HEARTBEAT_INTERVAL_MS);
426
+ console.log(` [Vortex] Heartbeat started (interval: ${HEARTBEAT_INTERVAL_MS / 1000}s)`);
427
+ }
428
+ /**
429
+ * Stop heartbeat timer
430
+ */
431
+ function stopHeartbeat() {
432
+ if (heartbeatInterval) {
433
+ clearInterval(heartbeatInterval);
434
+ heartbeatInterval = null;
435
+ }
436
+ }
437
+ /**
438
+ * Attempt to reconnect tunnel with exponential backoff
439
+ * Keeps the same session ID so iOS doesn't need to re-scan QR code
440
+ */
441
+ async function attemptTunnelReconnect() {
442
+ if (isReconnecting) {
443
+ return;
444
+ }
445
+ isReconnecting = true;
446
+ while (reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
447
+ reconnectAttempts++;
448
+ const delay = Math.min(Math.pow(2, reconnectAttempts) * 1000, MAX_RECONNECT_DELAY_MS);
449
+ console.log(` [Vortex] Tunnel reconnect attempt ${reconnectAttempts}/${MAX_RECONNECT_ATTEMPTS} in ${delay / 1000}s...`);
450
+ await new Promise(resolve => setTimeout(resolve, delay));
451
+ try {
452
+ await reconnectTunnel();
453
+ console.log(` [Vortex] Tunnel reconnected successfully!`);
454
+ reconnectAttempts = 0;
455
+ isReconnecting = false;
456
+ return;
457
+ }
458
+ catch (error) {
459
+ console.error(` [Vortex] Reconnect failed: ${error.message}`);
460
+ }
461
+ }
462
+ console.log(` [Vortex] Max reconnect attempts reached, giving up`);
463
+ isReconnecting = false;
464
+ cleanup();
465
+ }
466
+ /**
467
+ * Reconnect tunnel using existing session ID
468
+ */
469
+ async function reconnectTunnel() {
470
+ if (!sessionId || !gatewayUrl || !localPort) {
471
+ throw new Error('Missing session info for reconnect');
472
+ }
473
+ // Re-register tunnel with gateway (session should still exist)
474
+ try {
475
+ await axios_1.default.post(`${gatewayUrl}/api/tunnel/register`, {
476
+ session_id: sessionId,
477
+ });
478
+ }
479
+ catch (e) {
480
+ // If session expired, we need to create a new one
481
+ if (e.response?.status === 404) {
482
+ console.log(` [Vortex] Session expired, creating new session...`);
483
+ // Create new session
484
+ const response = await axios_1.default.post(`${gatewayUrl}/api/session`, {
485
+ mode: 'http_proxy',
486
+ client_type: `LeverageAI-Agent/${process.platform}`
487
+ });
488
+ const { session_id, url } = response.data;
489
+ sessionId = session_id;
490
+ tunnelUrl = url;
491
+ console.log(` [Vortex] New session created: ${session_id.substring(0, 8)}...`);
492
+ console.log(` [Vortex] ⚠️ New URL - need to re-scan QR code: ${url}`);
493
+ // Register new tunnel
494
+ await axios_1.default.post(`${gatewayUrl}/api/tunnel/register`, {
495
+ session_id: session_id,
496
+ });
497
+ }
498
+ else {
499
+ throw e;
500
+ }
501
+ }
502
+ // Connect WebSocket to gateway
503
+ const wsUrl = gatewayUrl.replace('https://', 'wss://').replace('http://', 'ws://') + `/tunnel/${sessionId}`;
504
+ return new Promise((resolve, reject) => {
505
+ tunnelWs = new ws_1.default(wsUrl, {
506
+ maxPayload: MAX_PAYLOAD_SIZE
507
+ });
508
+ tunnelWs.on('open', () => {
509
+ console.log(` [Vortex] Tunnel reconnected`);
510
+ startHeartbeat();
511
+ // Recreate shared local connection
512
+ createSharedLocalConnection();
513
+ resolve();
514
+ });
515
+ tunnelWs.on('message', (data) => {
516
+ try {
517
+ const msg = JSON.parse(data.toString());
518
+ handleGatewayMessage(msg);
519
+ }
520
+ catch (e) {
521
+ console.error('[Vortex] Invalid message from gateway:', e);
522
+ }
523
+ });
524
+ tunnelWs.on('close', () => {
525
+ console.log(' [Vortex] Tunnel disconnected');
526
+ stopHeartbeat();
527
+ tunnelWs = null;
528
+ // Auto reconnect again
529
+ if (!isReconnecting && sessionId && gatewayUrl) {
530
+ attemptTunnelReconnect();
531
+ }
532
+ });
533
+ tunnelWs.on('error', (err) => {
534
+ console.error(' [Vortex] Tunnel error:', err.message);
535
+ reject(err);
536
+ });
537
+ // Timeout for connection
538
+ setTimeout(() => {
539
+ if (tunnelWs && tunnelWs.readyState !== ws_1.default.OPEN) {
540
+ tunnelWs.close();
541
+ reject(new Error('Connection timeout'));
542
+ }
543
+ }, 10000);
544
+ });
545
+ }
546
+ /**
547
+ * Clean up resources
548
+ */
549
+ function cleanup() {
550
+ // Clear any pending requests
551
+ pendingRequests.forEach(({ reject, timeout }) => {
552
+ clearTimeout(timeout);
553
+ reject(new Error('Tunnel closed'));
554
+ });
555
+ pendingRequests.clear();
556
+ // Close shared local WebSocket
557
+ if (sharedLocalWs) {
558
+ sharedLocalWs.close();
559
+ sharedLocalWs = null;
560
+ sharedLocalWsReady = false;
561
+ }
562
+ // Close all WebSocket connections (legacy)
563
+ websocketConnections.forEach(ws => {
564
+ ws.close();
565
+ });
566
+ websocketConnections.clear();
567
+ }
568
+ function stopTunnel() {
569
+ // Set reconnecting to true to prevent auto-reconnect on manual stop
570
+ isReconnecting = true;
571
+ stopHeartbeat();
572
+ if (tunnelWs) {
573
+ tunnelWs.close();
574
+ tunnelWs = null;
575
+ }
576
+ cleanup();
577
+ tunnelUrl = null;
578
+ sessionId = null;
579
+ gatewayUrl = null;
580
+ isReconnecting = false;
581
+ reconnectAttempts = 0;
582
+ }
583
+ function getTunnelUrl() {
584
+ return tunnelUrl;
585
+ }
586
+ function isTunnelRunning() {
587
+ return tunnelWs !== null && tunnelWs.readyState === ws_1.default.OPEN;
588
+ }
589
+ //# sourceMappingURL=vortex-tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vortex-tunnel.js","sourceRoot":"","sources":["../src/vortex-tunnel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface WebServerOptions {
2
+ debugAsr?: boolean;
3
+ }
4
+ export declare function startWebServer(port: number, pin?: string, options?: WebServerOptions): Promise<void>;
5
+ export declare function stopWebServer(): void;
6
+ //# sourceMappingURL=web-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"AA+QA,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAiKD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgtDxG;AAED,wBAAgB,aAAa,IAAI,IAAI,CAepC"}