superjolt
Version:
AI-powered deployment platform with MCP support - Deploy JavaScript apps using natural language with Claude Desktop
136 lines • 6.58 kB
JavaScript
;
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 __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.DomainAddCommand = void 0;
const nest_commander_1 = require("nest-commander");
const api_service_1 = require("../services/api.service");
const auth_service_1 = require("../services/auth.service");
const logger_service_1 = require("../services/logger.service");
const common_1 = require("@nestjs/common");
const authenticated_command_1 = require("./authenticated.command");
const project_1 = require("../utils/project");
const chalk_1 = __importDefault(require("chalk"));
let DomainAddCommand = class DomainAddCommand extends authenticated_command_1.AuthenticatedCommand {
apiService;
authService;
logger;
constructor(apiService, authService, logger) {
super();
this.apiService = apiService;
this.authService = authService;
this.logger = logger;
}
async execute(passedParams, options) {
try {
const domain = passedParams[0];
let serviceId = passedParams[1];
if (!domain) {
this.logger.error('Error: Domain is required');
this.logger.log('Usage: superjolt domain:add <domain> [serviceId]');
this.logger.log('Example: superjolt domain:add app.example.com');
this.logger.log(' superjolt domain:add app.example.com happy-blue-fox');
process.exit(1);
}
if (!serviceId) {
const config = (0, project_1.readSuperjoltConfig)();
if (config?.serviceId) {
serviceId = config.serviceId;
this.logger.log(chalk_1.default.dim(`Using service ID from .superjolt file: ${serviceId}`));
}
else {
this.logger.error('Error: Service ID is required');
this.logger.log('Usage: superjolt domain:add <domain> [serviceId]');
this.logger.log('\nNo .superjolt file found. Run "superjolt deploy" first or provide a service ID.');
process.exit(1);
}
}
const domainRegex = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
if (!domainRegex.test(domain)) {
this.logger.error('Error: Invalid domain format');
this.logger.log('Domain must be a valid domain name (e.g., app.example.com)');
process.exit(1);
}
this.logger.log(chalk_1.default.dim(`Adding custom domain ${domain} to service ${serviceId}...`));
const response = await this.apiService.createCustomDomain({
domain,
serviceId,
isPrimary: options.primary,
});
this.logger.log(chalk_1.default.green(`✅ Custom domain added successfully!`));
this.logger.log('');
this.logger.log(`Domain: ${chalk_1.default.cyan(response.domain)}`);
this.logger.log(`Service: ${response.serviceId}`);
this.logger.log(`Status: ${this.formatStatus(response.status)}`);
this.logger.log(`SSL Status: ${this.formatStatus(response.sslStatus)}`);
if (response.isPrimary) {
this.logger.log(`Primary: ${chalk_1.default.green('Yes')}`);
}
if (response.validationTarget) {
this.logger.log('');
this.logger.log(chalk_1.default.yellow('⚠️ Domain validation required:'));
this.logger.log(`Validation Method: ${response.validationMethod}`);
this.logger.log(`Validation URL: ${chalk_1.default.cyan(response.validationTarget)}`);
this.logger.log('');
this.logger.log('The domain will be automatically validated once DNS propagates.');
this.logger.log('This usually takes a few minutes.');
}
this.logger.log('');
this.logger.log(chalk_1.default.dim('Check domain status with:'));
this.logger.log(chalk_1.default.cyan(` superjolt domain:status ${domain}`));
}
catch (error) {
this.logger.error(`\n${error.message}`);
process.exit(1);
}
}
parsePrimary() {
return true;
}
formatStatus(status) {
switch (status) {
case 'active':
return chalk_1.default.green('● Active');
case 'pending_validation':
return chalk_1.default.yellow('● Pending Validation');
case 'failed':
return chalk_1.default.red('● Failed');
case 'expired':
return chalk_1.default.red('● Expired');
default:
return chalk_1.default.gray(`● ${status}`);
}
}
};
exports.DomainAddCommand = DomainAddCommand;
__decorate([
(0, nest_commander_1.Option)({
flags: '-p, --primary',
description: 'Set this domain as the primary domain for the service',
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Boolean)
], DomainAddCommand.prototype, "parsePrimary", null);
exports.DomainAddCommand = DomainAddCommand = __decorate([
(0, common_1.Injectable)(),
(0, nest_commander_1.Command)({
name: 'domain:add',
arguments: '<domain> [serviceId]',
description: 'Add a custom domain to a service',
}),
__metadata("design:paramtypes", [api_service_1.ApiService,
auth_service_1.AuthService,
logger_service_1.LoggerService])
], DomainAddCommand);
//# sourceMappingURL=domain-add.command.js.map