superjolt
Version:
AI-powered deployment platform with MCP support - Deploy JavaScript apps using natural language with Claude Desktop
278 lines • 13.1 kB
JavaScript
;
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
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;
};
})();
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.StatusCommand = void 0;
const nest_commander_1 = require("nest-commander");
const common_1 = require("@nestjs/common");
const auth_service_1 = require("../services/auth.service");
const logger_service_1 = require("../services/logger.service");
const storage_service_1 = require("../services/storage.service");
const config_service_1 = require("../services/config.service");
const chalk_1 = __importDefault(require("chalk"));
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const os = __importStar(require("os"));
const project_1 = require("../utils/project");
const table_utils_1 = require("../utils/table.utils");
const cli_table3_1 = __importDefault(require("cli-table3"));
let StatusCommand = class StatusCommand extends nest_commander_1.CommandRunner {
authService;
storageService;
configService;
logger;
constructor(authService, storageService, configService, logger) {
super();
this.authService = authService;
this.storageService = storageService;
this.configService = configService;
this.logger = logger;
}
async run() {
this.logger.log(chalk_1.default.cyan('\n━━━ Superjolt CLI Status ━━━\n'));
const pkgPath = path.join(__dirname, '..', '..', 'package.json');
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
this.logger.log(chalk_1.default.bold.cyan('🔧 System Information\n'));
const versionTable = (0, table_utils_1.createInfoTable)();
versionTable.push([chalk_1.default.bold('CLI Version'), chalk_1.default.green(pkg.version)], [chalk_1.default.bold('Node Version'), chalk_1.default.green(process.version)], [
chalk_1.default.bold('Platform'),
chalk_1.default.green(`${process.platform} ${os.release()}`),
], [chalk_1.default.bold('Architecture'), chalk_1.default.green(process.arch)]);
this.logger.log(versionTable.toString());
this.logger.log(chalk_1.default.bold.cyan('\n🌐 API Configuration\n'));
const apiTable = (0, table_utils_1.createInfoTable)();
const apiUrl = this.configService.getApiUrl();
const baseUrl = this.configService.getBaseUrl();
const isDefault = baseUrl === 'https://api.superjolt.com';
apiTable.push([
chalk_1.default.bold('API URL'),
`${chalk_1.default.green(apiUrl)} ${isDefault ? chalk_1.default.dim('(default)') : chalk_1.default.yellow('(custom)')}`,
]);
if (process.env.SUPERJOLT_API_URL) {
apiTable.push([
chalk_1.default.bold('Source'),
chalk_1.default.yellow('Environment variable'),
]);
}
this.logger.log(apiTable.toString());
this.logger.log(chalk_1.default.bold.cyan('\n🔐 Authentication\n'));
const authTable = (0, table_utils_1.createInfoTable)();
const token = await this.authService.getToken();
if (token) {
const maskedToken = `${token.substring(0, 8)}...${token.substring(token.length - 8)}`;
authTable.push([chalk_1.default.bold('Status'), chalk_1.default.green('Authenticated')], [chalk_1.default.bold('Token'), chalk_1.default.dim(maskedToken)]);
try {
const keytar = require('keytar');
const keytarToken = await keytar.getPassword('superjolt-cli', 'token');
if (keytarToken) {
authTable.push([
chalk_1.default.bold('Storage'),
chalk_1.default.green('System Keychain (secure)'),
]);
}
else {
authTable.push([
chalk_1.default.bold('Storage'),
chalk_1.default.yellow('File (fallback)'),
]);
}
}
catch {
authTable.push([
chalk_1.default.bold('Storage'),
chalk_1.default.yellow('File (keytar unavailable)'),
]);
}
}
else {
authTable.push([chalk_1.default.bold('Status'), chalk_1.default.red('Not authenticated')], [
chalk_1.default.bold('Action'),
chalk_1.default.dim('Run "superjolt login" to authenticate'),
]);
}
this.logger.log(authTable.toString());
this.logger.log(chalk_1.default.bold.cyan('\n📁 Project Configuration\n'));
const projectTable = (0, table_utils_1.createInfoTable)();
const projectConfig = (0, project_1.readSuperjoltConfig)();
if (projectConfig) {
projectTable.push([chalk_1.default.bold('Service ID'), chalk_1.default.green(projectConfig.serviceId)], [chalk_1.default.bold('Config File'), chalk_1.default.dim('.superjolt')]);
}
else {
projectTable.push([chalk_1.default.bold('Status'), chalk_1.default.dim('No project configuration found')], [
chalk_1.default.bold('Action'),
chalk_1.default.dim('Run "superjolt deploy" to initialize'),
]);
}
this.logger.log(projectTable.toString());
this.logger.log(chalk_1.default.bold.cyan('\n💾 Local Storage\n'));
const storageTable = new cli_table3_1.default({
head: [chalk_1.default.bold.cyan('Type'), chalk_1.default.bold.cyan('Description')],
style: { head: [], border: [] },
chars: {
top: '─',
'top-mid': '┬',
'top-left': '┌',
'top-right': '┐',
bottom: '─',
'bottom-mid': '┴',
'bottom-left': '└',
'bottom-right': '┘',
left: '│',
'left-mid': '├',
mid: '─',
'mid-mid': '┼',
right: '│',
'right-mid': '┤',
middle: '│',
},
});
const configDir = path.join(os.homedir(), '.config', 'superjolt');
storageTable.push([chalk_1.default.bold('Config Directory'), chalk_1.default.dim(configDir)]);
const storedKeys = this.storageService.listKeys();
if (storedKeys.length > 0) {
for (const key of storedKeys) {
if (key === 'token') {
storageTable.push(['token', chalk_1.default.dim('Authentication credentials')]);
}
else if (key === 'update-check') {
const updateData = await this.storageService.getJson('update-check');
if (updateData) {
const lastCheck = new Date(updateData.lastCheck).toLocaleString();
storageTable.push([
'update-check',
chalk_1.default.dim(`Last checked: ${lastCheck}`),
]);
}
else {
storageTable.push([
'update-check',
chalk_1.default.dim('Update check cache'),
]);
}
}
else {
storageTable.push([key, chalk_1.default.dim('Cached data')]);
}
}
}
else {
storageTable.push([chalk_1.default.dim('Empty'), chalk_1.default.dim('No stored data')]);
}
this.logger.log(storageTable.toString());
this.logger.log(chalk_1.default.bold.cyan('\n🔧 Environment Variables\n'));
const envTable = (0, table_utils_1.createInfoTable)();
const envVars = [
'SUPERJOLT_API_URL',
'SUPERJOLT_NO_UPDATE_CHECK',
'CI',
'CONTINUOUS_INTEGRATION',
];
let hasEnvVars = false;
for (const envVar of envVars) {
if (process.env[envVar]) {
envTable.push([chalk_1.default.bold(envVar), chalk_1.default.green(process.env[envVar])]);
hasEnvVars = true;
}
}
if (!hasEnvVars) {
envTable.push([
chalk_1.default.dim('Status'),
chalk_1.default.dim('No Superjolt environment variables set'),
]);
}
this.logger.log(envTable.toString());
this.logger.log(chalk_1.default.bold.cyan('\n🔄 Update Settings\n'));
const updateTable = (0, table_utils_1.createInfoTable)();
const updateCache = await this.storageService.getJson('update-check');
const actualCurrentVersion = pkg.version;
if (updateCache) {
updateTable.push([
chalk_1.default.bold('Last Check'),
chalk_1.default.green(new Date(updateCache.lastCheck).toLocaleString()),
]);
if (updateCache.latestVersion) {
const isOutdated = updateCache.latestVersion !== actualCurrentVersion;
if (isOutdated) {
updateTable.push([
chalk_1.default.bold('Latest Version'),
`${chalk_1.default.yellow(updateCache.latestVersion)} ${chalk_1.default.yellow('(update available)')}`,
]);
}
else {
updateTable.push([
chalk_1.default.bold('Latest Version'),
`${chalk_1.default.green(updateCache.latestVersion)} ${chalk_1.default.green('(up to date)')}`,
]);
}
}
}
else {
updateTable.push([chalk_1.default.bold('Last Check'), chalk_1.default.dim('Never')]);
}
updateTable.push([
chalk_1.default.bold('Auto-Update'),
process.env.SUPERJOLT_NO_UPDATE_CHECK
? chalk_1.default.red('Disabled')
: chalk_1.default.green('Enabled'),
]);
this.logger.log(updateTable.toString());
this.logger.log(chalk_1.default.cyan('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
}
};
exports.StatusCommand = StatusCommand;
exports.StatusCommand = StatusCommand = __decorate([
(0, common_1.Injectable)(),
(0, nest_commander_1.Command)({
name: 'status',
aliases: ['info', 'config'],
description: 'Display CLI status, configuration, and stored data',
}),
__metadata("design:paramtypes", [auth_service_1.AuthService,
storage_service_1.StorageService,
config_service_1.ConfigService,
logger_service_1.LoggerService])
], StatusCommand);
//# sourceMappingURL=status.command.js.map