@laiyon/create-wasapi
Version:
CLI to create WhatsApp bot projects with Wasapi and BuilderBot
63 lines (62 loc) ⢠3.08 kB
JavaScript
import chalk from "chalk";
import { askForAutomaticSetup } from "../ui/prompts/automaticSetup.js";
import { detectSystemConfig, setupNgrokToken } from "../utils/systemDetector.js";
import { startDevServerWithNgrok } from "./devServer.js";
import { showManualInstructions } from "../ui/instructions.js";
import { askForGitHubStar } from "../ui/githubStar.js";
export class AutomaticSetupService {
static async handleAutomaticSetup(projectName, phoneNumber, databaseFailed = false) {
try {
// Detect system configuration
const systemConfig = await detectSystemConfig();
// If database connection failed, don't offer automatic setup
if (databaseFailed) {
console.log(chalk.yellow("\nâ ď¸ Database connection failed. Automatic setup is not available."));
console.log(chalk.yellow("đ Showing manual setup instructions instead."));
await showManualInstructions(projectName, systemConfig, true);
await askForGitHubStar();
return { success: true, serverRunning: false };
}
// Ask user if they want automatic setup (only if ngrok is available)
let canAutoSetup = systemConfig.canAutoSetup;
// If ngrok is installed but no token, offer to configure it
if (systemConfig.ngrokInstalled && !systemConfig.ngrokHasToken) {
const tokenConfigured = await setupNgrokToken();
canAutoSetup = tokenConfigured;
}
const wantsAutoSetup = await askForAutomaticSetup(canAutoSetup);
if (canAutoSetup && wantsAutoSetup) {
try {
await startDevServerWithNgrok(projectName, phoneNumber);
// â
SUCCESS: Server is running with ngrok
return { success: true, serverRunning: true };
}
catch (autoSetupError) {
console.log("\nâ ď¸ Automatic setup failed, showing manual instructions:");
await showManualInstructions(projectName, systemConfig);
return {
success: false,
serverRunning: false,
error: autoSetupError instanceof Error ? autoSetupError.message : String(autoSetupError)
};
}
}
else {
if (canAutoSetup && !wantsAutoSetup) {
console.log("\nđ¤ User chose manual setup");
}
await showManualInstructions(projectName, systemConfig);
// Ask for GitHub star at the end (only for manual setup)
await askForGitHubStar();
return { success: true, serverRunning: false };
}
}
catch (error) {
return {
success: false,
serverRunning: false,
error: error instanceof Error ? error.message : String(error)
};
}
}
}