@laiyon/create-wasapi
Version:
CLI to create WhatsApp bot projects with Wasapi and BuilderBot
53 lines (52 loc) ⢠2.18 kB
JavaScript
import ngrok from "ngrok";
import qrcode from "qrcode-terminal";
import chalk from "chalk";
import { getFreePort } from "../utils/portUtils.js";
export async function startNgrok(projectName, port, phoneNumber) {
try {
const targetPort = port || await getFreePort(3000);
// Start ngrok directly - let it handle multiple tunnel limitations
const url = await ngrok.connect({ addr: targetPort });
// Generate webhook URL
const webhookUrl = `${url}/webhook/wasapi`;
console.log("");
console.log(chalk.bgGreen.black(" ā
NGROK TUNNEL ACTIVE "));
console.log("");
console.log(chalk.green.bold("š Webhook URL:"));
console.log(chalk.cyan(` ${webhookUrl}`));
console.log(chalk.gray(" ā Use this URL in your Wasapi configuration"));
console.log("");
// Generate wa.me QR if phone number is provided
if (phoneNumber) {
await generateWaMeQR(phoneNumber);
}
return { url, webhookUrl };
}
catch (error) {
// Handle specific ngrok errors
if (error.message?.includes('ECONNREFUSED')) {
throw new Error(`š« Ngrok limitation: Free accounts allow only 1 tunnel.\nš” Close other tunnels: pkill ngrok`);
}
else {
throw new Error(`Ngrok connection failed: ${error.message || error}`);
}
}
}
async function generateWaMeQR(phoneNumber) {
try {
// Clean phone number (remove spaces, dashes, etc.)
const cleanPhoneNumber = phoneNumber.replace(/\D/g, '');
// Generate wa.me link with predefined message
const waMeLink = `https://wa.me/${cleanPhoneNumber}?text=test`;
console.log(chalk.bgBlue.white(" š± TEST YOUR BOT "));
console.log("");
qrcode.generate(waMeLink, { small: true });
console.log(chalk.blue.bold("š Or click this link:"));
console.log(chalk.cyan(` ${waMeLink}`));
console.log(chalk.gray(" š” Ctrl+Click (Cmd+Click on Mac) to open"));
console.log("");
}
catch (error) {
console.warn(`ā ļø Could not generate wa.me QR: ${error}`);
}
}