#!/usr/bin/env node import chalk from "chalk"; import { randomBytes } from "crypto"; import { copyFileSync, writeFileSync } from "fs"; const genUrlSafeBase64 = (bytes) => { return randomBytes(bytes) .toString("base64") .replace(/\+/g, "-") .replace(/\//g, "_") .replace(/=+$/g, ""); }; async function main() { // Step 1: Generate secrets console.log( chalk.magentaBright("\n================ Autumn Setup ================\n"), ); const secrets = { BETTER_AUTH_SECRET: genUrlSafeBase64(64), ENCRYPTION_IV: process.env.ENCRYPTION_IV, ENCRYPTION_PASSWORD: process.env.ENCRYPTION_PASSWORD, BETTER_AUTH_URL: "http://localhost:8080", CLIENT_URL: "http://localhost:3000", LOCALTUNNEL_RESERVED_KEY: process.env.LOCALTUNNEL_RESERVED_KEY, STRIPE_WEBHOOK_URL: process.env.STRIPE_WEBHOOK_URL, }; const databaseUrl = process.env.DATABASE_URL; const stripeWebhookVars = []; // stripeWebhookVars = await handleLocalRunSetup(); // Step 11: Write to server/.env console.log( chalk.magentaBright("\n================ Writing .env ================\n"), ); const envSections = []; // Autumn Auth section envSections.push( "# Auth", `BETTER_AUTH_SECRET=${secrets.BETTER_AUTH_SECRET}`, `BETTER_AUTH_URL=${secrets.BETTER_AUTH_URL}`, `CLIENT_URL=${secrets.CLIENT_URL}`, "", ); // Stripe required section envSections.push( "# Stripe", `LOCALTUNNEL_RESERVED_KEY=${secrets.LOCALTUNNEL_RESERVED_KEY}`, `ENCRYPTION_IV=${secrets.ENCRYPTION_IV}`, `ENCRYPTION_PASSWORD=${secrets.ENCRYPTION_PASSWORD}`, `STRIPE_WEBHOOK_URL=${secrets.STRIPE_WEBHOOK_URL}`, "", ); // Database section if (databaseUrl) { envSections.push("# Database", `DATABASE_URL=${databaseUrl}`, ""); } // Stripe Webhooks section if (stripeWebhookVars.length > 0) { envSections.push("# Stripe Webhooks"); envSections.push(...stripeWebhookVars); envSections.push(""); } const envVars = envSections.join("\n"); writeFileSync("server/.env", envVars); try { copyFileSync("vite/.env.example", "vite/.env"); } catch (error) { console.log(chalk.red("❌ Failed to copy vite/.env.example to vite/.env")); console.log(chalk.red("❌ Please copy the file manually")); } console.log(chalk.greenBright("🎉 Setup complete! 🎉")); console.log(chalk.cyan("You can find your env variables in server/.env")); console.log(chalk.cyan("\nNext steps:")); console.log(chalk.cyan("Run the following command to start Autumn:")); console.log(chalk.cyan(" docker compose -f docker-compose.dev.yml up")); } main();