-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathinit-dev.js
More file actions
117 lines (98 loc) · 3.51 KB
/
init-dev.js
File metadata and controls
117 lines (98 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
require('dotenv').config()
const fs = require("fs");
const crypto = require("crypto");
const { exec, execSync } = require("child_process");
const util = require("util");
const execAsync = util.promisify(exec);
console.log("🔧 Initializing Cortex ETL development environment...");
function generateWebhookSecret() {
// Generate 32 bytes (256 bits) of secure random data, encoded as hex
return crypto.randomBytes(32).toString("hex");
}
async function initializeSupabaseCLI() {
try {
console.log("🏃 Starting Supabase services...");
execSync("npx supabase start --exclude vector", { stdio: "inherit" });
console.log("✅ Supabase services started");
console.log("🔑 Extracting keys from Supabase CLI...");
const { stdout } = await execAsync("npx supabase status -o json");
const cliEnv = parseSupabaseStatus(JSON.parse(stdout));
console.log("🔐 Generating webhook secret...");
const webhookSecret = generateWebhookSecret();
console.log(` Generated: ${webhookSecret.substring(0, 16)}...`);
console.log("📝 Generating .env file...");
const envContent = generateEnvFile(cliEnv, webhookSecret);
fs.writeFileSync(".env", envContent);
console.log("✅ Environment file created");
console.log("🎉 Development environment ready!");
console.log("");
console.log("🌐 Access points:");
console.log(` API: http://localhost:54321`);
console.log(` Studio: http://localhost:54323`);
console.log(` Backend: http://localhost:8000`);
console.log(
` Database: postgresql://postgres:postgres@localhost:54322/postgres`
);
} catch (error) {
console.error("❌ Initialization failed:", error.message);
process.exit(1);
}
}
function parseSupabaseStatus(output) {
const env = {};
if (output.API_URL) {
env.SUPABASE_URL = output.API_URL;
}
if (output.DB_URL) {
env.DB_URL = output.DB_URL;
}
if (output.STUDIO_URL) {
env.STUDIO_URL = output.STUDIO_URL;
}
if (output.ANON_KEY) {
env.SUPABASE_ANON_KEY = output.ANON_KEY;
}
if (output.SERVICE_ROLE_KEY) {
env.SUPABASE_SERVICE_ROLE_KEY = output.SERVICE_ROLE_KEY;
}
return env;
}
function generateEnvFile(cliEnv, webhookSecret) {
return `# Generated by Supabase CLI - ${new Date().toISOString()}
# Shared Environment
ENVIRONMENT=development
DOCKERFILE=Dockerfile.dev
# Frontend Variables (browser-accessible)
VITE_SUPABASE_URL=${cliEnv.SUPABASE_URL || "http://localhost:54321"}
VITE_SUPABASE_ANON_KEY=${cliEnv.SUPABASE_ANON_KEY || ""}
VITE_API_BASE_URL=http://localhost:8000
# Backend Variables (container-accessible)
BACKEND_SUPABASE_URL=${
cliEnv.SUPABASE_URL?.replace("127.0.0.1", "host.docker.internal") ||
"http://host.docker.internal:54321"
}
BACKEND_SUPABASE_SERVICE_ROLE_KEY=${cliEnv.SUPABASE_SERVICE_ROLE_KEY || ""}
# Webhook Configuration
WEBHOOK_BASE_URL=http://host.docker.internal:8000
WEBHOOK_SECRET=${webhookSecret}
# Development Info
STUDIO_URL=${cliEnv.STUDIO_URL || "http://localhost:54323"}
DB_URL=${
cliEnv.DB_URL || "postgresql://postgres:postgres@localhost:54322/postgres"
}
# Gemini API Key
GEMINI_API_KEY=${process.env.GEMINI_API_KEY}
`;
}
// Create network if it doesn't exist (keeping for Docker Compose compatibility)
exec("docker network inspect cortex-network", (error) => {
if (error) {
exec("docker network create cortex-network", () => {
console.log("🌐 Created cortex-network");
});
} else {
console.log("🌐 Network cortex-network already exists");
}
});
// Run initialization
initializeSupabaseCLI();