UNPKG

@2501-ai/cli

Version:

[![npm version](https://img.shields.io/npm/v/@2501-ai/cli.svg)](https://www.npmjs.com/package/@2501-ai/cli) [![HumanEval Score](https://img.shields.io/badge/HumanEval-96.95%25-brightgreen.svg)](https://www.2501.ai/research/full-humaneval-benchmark) [![Lic

118 lines (117 loc) 4.22 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSSHConfigEntries = getSSHConfigEntries; exports.lookupConnectionInSSHConfig = lookupConnectionInSSHConfig; exports.hasSSHConfig = hasSSHConfig; exports.getSSHConfigPath = getSSHConfigPath; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const os_1 = __importDefault(require("os")); const logger_1 = __importDefault(require("./logger")); function parseSSHConfigFile(configPath) { const configs = new Map(); if (!fs_1.default.existsSync(configPath)) { return configs; } try { const content = fs_1.default.readFileSync(configPath, 'utf-8'); const lines = content.split('\n'); let currentHost = null; for (const line of lines) { const trimmed = line.trim(); if (isCommentOrEmpty(trimmed)) { continue; } const [key, ...valueParts] = trimmed.split(/\s+/); const value = valueParts.join(' '); if (isHostDirective(key)) { currentHost = saveAndCreateNewHost(configs, currentHost, value); } else if (currentHost) { addPropertyToHost(currentHost, key, value); } } saveHost(configs, currentHost); } catch (error) { logger_1.default.debug(`Failed to parse SSH config ${configPath}: ${error}`); } return configs; } function isCommentOrEmpty(line) { return !line || line.startsWith('#'); } function isHostDirective(key) { return key.toLowerCase() === 'host'; } function saveAndCreateNewHost(configs, currentHost, hostValue) { saveHost(configs, currentHost); return { host: hostValue }; } function saveHost(configs, host) { if (host) { configs.set(host.host, host); } } function addPropertyToHost(host, key, value) { switch (key.toLowerCase()) { case 'hostname': host.hostname = value; break; case 'user': host.user = value; break; case 'port': host.port = value; break; case 'identityfile': host.identityFile = value; break; } } function getSSHConfigEntries() { const sshConfigPath = path_1.default.join(os_1.default.homedir(), '.ssh', 'config'); return parseSSHConfigFile(sshConfigPath); } function lookupConnectionInSSHConfig(connectionString, defaultPort) { const sshConfigs = getSSHConfigEntries(); const { hostToLookup, userOverride, portOverride } = parseConnectionOverrides(connectionString); const configEntry = sshConfigs.get(hostToLookup); if (!configEntry) { return null; } return buildConnectionDetails(configEntry, hostToLookup, userOverride, portOverride, defaultPort); } function parseConnectionOverrides(connectionString) { let hostToLookup = connectionString; let userOverride; let portOverride; const userMatch = connectionString.match(/^([^@]+)@(.+)$/); if (userMatch) { userOverride = userMatch[1]; hostToLookup = userMatch[2]; } const portMatch = hostToLookup.match(/^(.+):(\d+)$/); if (portMatch) { hostToLookup = portMatch[1]; portOverride = portMatch[2]; } return { hostToLookup, userOverride, portOverride }; } function buildConnectionDetails(configEntry, hostToLookup, userOverride, portOverride, defaultPort = '22') { const user = userOverride || configEntry.user || os_1.default.userInfo().username; const host = configEntry.hostname || hostToLookup; const port = portOverride || configEntry.port || defaultPort; const identityFile = configEntry.identityFile; return { user, host, port, identityFile }; } function hasSSHConfig() { const sshConfigPath = path_1.default.join(os_1.default.homedir(), '.ssh', 'config'); return fs_1.default.existsSync(sshConfigPath); } function getSSHConfigPath() { return path_1.default.join(os_1.default.homedir(), '.ssh', 'config'); }