UNPKG

vibetunnel

Version:

Terminal sharing server with web interface - supports macOS, Linux, and headless environments

118 lines 11.9 kB
"use strict"; /** * Socket API client for VibeTunnel control operations * Used by the vt command to communicate with the server via Unix socket */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.SocketApiClient = void 0; const fs = __importStar(require("fs")); const os = __importStar(require("os")); const path = __importStar(require("path")); const socket_client_js_1 = require("./pty/socket-client.js"); const socket_protocol_js_1 = require("./pty/socket-protocol.js"); const logger_js_1 = require("./utils/logger.js"); const logger = (0, logger_js_1.createLogger)('socket-api'); /** * Client for control socket operations */ class SocketApiClient { constructor() { // Use control directory from environment or default const controlDir = process.env.VIBETUNNEL_CONTROL_DIR || path.join(os.homedir(), '.vibetunnel'); // Use api.sock instead of control.sock to avoid conflicts with Mac app this.controlSocketPath = path.join(controlDir, 'api.sock'); } /** * Check if the control socket exists */ isSocketAvailable() { return fs.existsSync(this.controlSocketPath); } /** * Send a request and wait for response */ async sendRequest(type, payload, responseType, timeout = 5000) { if (!this.isSocketAvailable()) { throw new Error('VibeTunnel server is not running'); } const client = new socket_client_js_1.VibeTunnelSocketClient(this.controlSocketPath); try { await client.connect(); const response = await client.sendMessageWithResponse(type, payload, responseType, timeout); return response; } catch (error) { if (error instanceof Error && error.message.includes('ENOENT')) { throw new Error('VibeTunnel server is not running'); } throw error; } finally { client.disconnect(); } } /** * Get server status */ async getStatus() { if (!this.isSocketAvailable()) { return { running: false }; } try { // Send STATUS_REQUEST and wait for STATUS_RESPONSE const response = await this.sendRequest(socket_protocol_js_1.MessageType.STATUS_REQUEST, {}, socket_protocol_js_1.MessageType.STATUS_RESPONSE); return response; } catch (error) { logger.error('Failed to get server status:', error); return { running: false }; } } /** * Enable or disable Git follow mode */ async setFollowMode(request) { return this.sendRequest(socket_protocol_js_1.MessageType.GIT_FOLLOW_REQUEST, request, socket_protocol_js_1.MessageType.GIT_FOLLOW_RESPONSE); } /** * Send Git event notification */ async sendGitEvent(event) { return this.sendRequest(socket_protocol_js_1.MessageType.GIT_EVENT_NOTIFY, event, socket_protocol_js_1.MessageType.GIT_EVENT_ACK); } } exports.SocketApiClient = SocketApiClient; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3NvY2tldC1hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDZEQUFnRTtBQUNoRSxpRUFPa0M7QUFDbEMsaURBQWlEO0FBRWpELE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQVksRUFBQyxZQUFZLENBQUMsQ0FBQztBQWExQzs7R0FFRztBQUNILE1BQWEsZUFBZTtJQUcxQjtRQUNFLG9EQUFvRDtRQUNwRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hHLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsV0FBVyxDQUN2QixJQUFjLEVBQ2QsT0FBaUMsRUFDakMsWUFBeUIsRUFDekIsT0FBTyxHQUFHLElBQUk7UUFFZCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUkseUNBQXNCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUYsT0FBTyxRQUFxQixDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsbURBQW1EO1lBQ25ELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FDckMsZ0NBQVcsQ0FBQyxjQUFjLEVBQzFCLEVBQUUsRUFDRixnQ0FBVyxDQUFDLGVBQWUsQ0FDNUIsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQXlCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsZ0NBQVcsQ0FBQyxrQkFBa0IsRUFDOUIsT0FBTyxFQUNQLGdDQUFXLENBQUMsbUJBQW1CLENBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQXFCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsZ0NBQVcsQ0FBQyxnQkFBZ0IsRUFDNUIsS0FBSyxFQUNMLGdDQUFXLENBQUMsYUFBYSxDQUMxQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBekZELDBDQXlGQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU29ja2V0IEFQSSBjbGllbnQgZm9yIFZpYmVUdW5uZWwgY29udHJvbCBvcGVyYXRpb25zXG4gKiBVc2VkIGJ5IHRoZSB2dCBjb21tYW5kIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHNlcnZlciB2aWEgVW5peCBzb2NrZXRcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgVmliZVR1bm5lbFNvY2tldENsaWVudCB9IGZyb20gJy4vcHR5L3NvY2tldC1jbGllbnQuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBHaXRFdmVudEFjayxcbiAgdHlwZSBHaXRFdmVudE5vdGlmeSxcbiAgdHlwZSBHaXRGb2xsb3dSZXF1ZXN0LFxuICB0eXBlIEdpdEZvbGxvd1Jlc3BvbnNlLFxuICB0eXBlIE1lc3NhZ2VQYXlsb2FkLFxuICBNZXNzYWdlVHlwZSxcbn0gZnJvbSAnLi9wdHkvc29ja2V0LXByb3RvY29sLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzb2NrZXQtYXBpJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyU3RhdHVzIHtcbiAgcnVubmluZzogYm9vbGVhbjtcbiAgcG9ydD86IG51bWJlcjtcbiAgdXJsPzogc3RyaW5nO1xuICBmb2xsb3dNb2RlPzoge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYnJhbmNoPzogc3RyaW5nO1xuICAgIHJlcG9QYXRoPzogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIENsaWVudCBmb3IgY29udHJvbCBzb2NrZXQgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgU29ja2V0QXBpQ2xpZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sU29ja2V0UGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFVzZSBjb250cm9sIGRpcmVjdG9yeSBmcm9tIGVudmlyb25tZW50IG9yIGRlZmF1bHRcbiAgICBjb25zdCBjb250cm9sRGlyID0gcHJvY2Vzcy5lbnYuVklCRVRVTk5FTF9DT05UUk9MX0RJUiB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLnZpYmV0dW5uZWwnKTtcbiAgICAvLyBVc2UgYXBpLnNvY2sgaW5zdGVhZCBvZiBjb250cm9sLnNvY2sgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggTWFjIGFwcFxuICAgIHRoaXMuY29udHJvbFNvY2tldFBhdGggPSBwYXRoLmpvaW4oY29udHJvbERpciwgJ2FwaS5zb2NrJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgc29ja2V0IGV4aXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBpc1NvY2tldEF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyh0aGlzLmNvbnRyb2xTb2NrZXRQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgcmVxdWVzdCBhbmQgd2FpdCBmb3IgcmVzcG9uc2VcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZFJlcXVlc3Q8VFJlcXVlc3QgZXh0ZW5kcyBNZXNzYWdlVHlwZSwgVFJlc3BvbnNlPihcbiAgICB0eXBlOiBUUmVxdWVzdCxcbiAgICBwYXlsb2FkOiBNZXNzYWdlUGF5bG9hZDxUUmVxdWVzdD4sXG4gICAgcmVzcG9uc2VUeXBlOiBNZXNzYWdlVHlwZSxcbiAgICB0aW1lb3V0ID0gNTAwMFxuICApOiBQcm9taXNlPFRSZXNwb25zZT4ge1xuICAgIGlmICghdGhpcy5pc1NvY2tldEF2YWlsYWJsZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpYmVUdW5uZWwgc2VydmVyIGlzIG5vdCBydW5uaW5nJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFZpYmVUdW5uZWxTb2NrZXRDbGllbnQodGhpcy5jb250cm9sU29ja2V0UGF0aCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmRNZXNzYWdlV2l0aFJlc3BvbnNlKHR5cGUsIHBheWxvYWQsIHJlc3BvbnNlVHlwZSwgdGltZW91dCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UgYXMgVFJlc3BvbnNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9FTlQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpYmVUdW5uZWwgc2VydmVyIGlzIG5vdCBydW5uaW5nJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlcnZlciBzdGF0dXNcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFNlcnZlclN0YXR1cz4ge1xuICAgIGlmICghdGhpcy5pc1NvY2tldEF2YWlsYWJsZSgpKSB7XG4gICAgICByZXR1cm4geyBydW5uaW5nOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBTZW5kIFNUQVRVU19SRVFVRVNUIGFuZCB3YWl0IGZvciBTVEFUVVNfUkVTUE9OU0VcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdDxNZXNzYWdlVHlwZS5TVEFUVVNfUkVRVUVTVCwgU2VydmVyU3RhdHVzPihcbiAgICAgICAgTWVzc2FnZVR5cGUuU1RBVFVTX1JFUVVFU1QsXG4gICAgICAgIHt9LFxuICAgICAgICBNZXNzYWdlVHlwZS5TVEFUVVNfUkVTUE9OU0VcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBzZXJ2ZXIgc3RhdHVzOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7IHJ1bm5pbmc6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIEdpdCBmb2xsb3cgbW9kZVxuICAgKi9cbiAgYXN5bmMgc2V0Rm9sbG93TW9kZShyZXF1ZXN0OiBHaXRGb2xsb3dSZXF1ZXN0KTogUHJvbWlzZTxHaXRGb2xsb3dSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0PE1lc3NhZ2VUeXBlLkdJVF9GT0xMT1dfUkVRVUVTVCwgR2l0Rm9sbG93UmVzcG9uc2U+KFxuICAgICAgTWVzc2FnZVR5cGUuR0lUX0ZPTExPV19SRVFVRVNULFxuICAgICAgcmVxdWVzdCxcbiAgICAgIE1lc3NhZ2VUeXBlLkdJVF9GT0xMT1dfUkVTUE9OU0VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgR2l0IGV2ZW50IG5vdGlmaWNhdGlvblxuICAgKi9cbiAgYXN5bmMgc2VuZEdpdEV2ZW50KGV2ZW50OiBHaXRFdmVudE5vdGlmeSk6IFByb21pc2U8R2l0RXZlbnRBY2s+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdDxNZXNzYWdlVHlwZS5HSVRfRVZFTlRfTk9USUZZLCBHaXRFdmVudEFjaz4oXG4gICAgICBNZXNzYWdlVHlwZS5HSVRfRVZFTlRfTk9USUZZLFxuICAgICAgZXZlbnQsXG4gICAgICBNZXNzYWdlVHlwZS5HSVRfRVZFTlRfQUNLXG4gICAgKTtcbiAgfVxufVxuIl19