@2501-ai/cli
Version:
[](https://www.npmjs.com/package/@2501-ai/cli) [](https://www.2501.ai/research/full-humaneval-benchmark) [![Lic
118 lines (117 loc) • 4.22 kB
JavaScript
;
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');
}