@xtest-cli/cli
Version:
CLI for xtest.ing - AI-powered test generation platform
148 lines ⢠6.18 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sessionsCommand = void 0;
const commander_1 = require("commander");
const chalk_1 = __importDefault(require("chalk"));
const ora_1 = __importDefault(require("ora"));
const axios_1 = __importDefault(require("axios"));
const config_1 = require("../utils/config");
const cli_table3_1 = __importDefault(require("cli-table3"));
exports.sessionsCommand = new commander_1.Command('sessions')
.description('Manage browser sessions');
// Add list subcommand
exports.sessionsCommand
.command('list')
.description('List all active browser sessions')
.action(async () => {
const spinner = (0, ora_1.default)({
text: 'Fetching sessions...',
color: 'cyan',
}).start();
try {
const config = await (0, config_1.getConfig)();
if (!config.apiKey) {
spinner.fail('Not authenticated');
console.log(chalk_1.default.gray('\nPlease authenticate first:'));
console.log(chalk_1.default.cyan(' xtest auth\n'));
process.exit(1);
}
// Fetch sessions from server
const response = await axios_1.default.get(`${config.serverUrl}/api/enhanced-browser/inspector/sessions`, {
headers: {
'Authorization': `Bearer ${config.apiKey}`,
},
timeout: 5000,
});
spinner.succeed('Sessions fetched');
const sessions = response.data.sessions || [];
if (sessions.length === 0) {
console.log('\n' + chalk_1.default.yellow('š No active sessions'));
console.log(chalk_1.default.gray('\nStart a new session:'));
console.log(chalk_1.default.cyan(' xtest browser --interactive\n'));
return;
}
// Create table
const table = new cli_table3_1.default({
head: [
chalk_1.default.cyan('Session ID'),
chalk_1.default.cyan('Mode'),
chalk_1.default.cyan('Browser'),
chalk_1.default.cyan('Created'),
chalk_1.default.cyan('Status'),
],
style: {
head: [],
border: ['gray'],
},
});
sessions.forEach((session) => {
const created = new Date(session.created);
const now = new Date();
const ageMinutes = Math.floor((now.getTime() - created.getTime()) / 60000);
let ageStr = created.toLocaleTimeString();
if (ageMinutes < 60) {
ageStr += chalk_1.default.gray(` (${ageMinutes}m ago)`);
}
else {
ageStr += chalk_1.default.gray(` (${Math.floor(ageMinutes / 60)}h ago)`);
}
table.push([
chalk_1.default.yellow(session.id),
session.mode || 'headed',
session.browser || 'chromium',
ageStr,
chalk_1.default.green('ā Active'),
]);
});
console.log('\n' + chalk_1.default.cyan.bold('š„ļø Active Browser Sessions'));
console.log(table.toString());
console.log('\n' + chalk_1.default.gray('To close a session:'));
console.log(chalk_1.default.cyan(' xtest sessions close <session-id>\n'));
}
catch (error) {
spinner.fail('Failed to fetch sessions');
if (error.code === 'ECONNREFUSED') {
console.error(chalk_1.default.red('\nā Could not connect to server'));
console.error(chalk_1.default.gray(` Server: ${error.config?.baseURL || 'unknown'}`));
}
else if (error.response?.status === 401) {
console.error(chalk_1.default.red('\nā Authentication failed'));
console.error(chalk_1.default.gray(' Your API key may be invalid'));
}
else {
console.error(chalk_1.default.red('\nā Error: ') + error.message);
}
process.exit(1);
}
});
// Add subcommand to close a session
exports.sessionsCommand
.command('close <sessionId>')
.description('Close a browser session')
.action(async (sessionId) => {
const spinner = (0, ora_1.default)({
text: 'Closing session...',
color: 'yellow',
}).start();
try {
const config = await (0, config_1.getConfig)();
if (!config.apiKey) {
spinner.fail('Not authenticated');
console.log(chalk_1.default.gray('\nPlease authenticate first:'));
console.log(chalk_1.default.cyan(' xtest auth\n'));
process.exit(1);
}
await axios_1.default.delete(`${config.serverUrl}/api/enhanced-browser/inspector/${sessionId}`, {
headers: {
'Authorization': `Bearer ${config.apiKey}`,
},
timeout: 5000,
});
spinner.succeed(`Session ${sessionId} closed`);
console.log(chalk_1.default.gray('\nSession has been terminated successfully.\n'));
}
catch (error) {
spinner.fail('Failed to close session');
if (error.response?.status === 404) {
console.error(chalk_1.default.red('\nā Session not found'));
console.error(chalk_1.default.gray(` Session ID: ${sessionId}`));
}
else {
console.error(chalk_1.default.red('\nā Error: ') + error.message);
}
process.exit(1);
}
});
// Default action shows help
exports.sessionsCommand.action(() => {
console.log('\n' + chalk_1.default.cyan.bold('š Session Management Commands\n'));
console.log(chalk_1.default.white(' List active sessions:'));
console.log(chalk_1.default.cyan(' xtest sessions list\n'));
console.log(chalk_1.default.white(' Close a session:'));
console.log(chalk_1.default.cyan(' xtest sessions close <session-id>\n'));
console.log(chalk_1.default.gray('For more help: ') + chalk_1.default.cyan('xtest sessions --help\n'));
});
//# sourceMappingURL=sessions.js.map