@mesh-tech/mesh-cli
Version:
CLI for Mesh platform development utilities
47 lines (46 loc) • 1.94 kB
JavaScript
import { detectContext, getDatabaseUrl, logInfo, logError, } from "../../utils/index.js";
export async function credentialsCommand(options) {
let platformTenant;
let platformEnv;
if (options.tenant && options.env) {
platformTenant = options.tenant;
platformEnv = options.env;
logInfo(`Platform: Tenant=${platformTenant}, Env=${platformEnv}`);
}
else if (options.tenant || options.env) {
logError("Both --tenant and --env are required");
logInfo("Usage: mesh db credentials --tenant mesh --env dev-temporal --app rdc --app-tenant encore --app-stage dev");
process.exit(1);
}
else {
const ctx = detectContext();
platformTenant = ctx.tenant;
platformEnv = ctx.platformEnv;
logInfo(`Auto-detected: Tenant=${platformTenant}, Env=${platformEnv}`);
}
const appTenant = options.appTenant ?? platformTenant;
const appStage = options.appStage ?? platformEnv;
const appName = options.app;
if (appName) {
logInfo(`App credentials: tenant=${appTenant}, stage=${appStage}, app=${appName}`);
}
const databaseUrl = await getDatabaseUrl(appTenant, appStage, { app: appName });
const parsed = new URL(databaseUrl);
console.log("");
console.log("Database Credentials:");
console.log(` Host: ${parsed.hostname}`);
console.log(` Port: ${parsed.port || 5432}`);
console.log(` Database: ${parsed.pathname.slice(1)}`);
console.log(` Username: ${parsed.username}`);
console.log(` Password: ${decodeURIComponent(parsed.password)}`);
console.log("");
console.log("DATABASE_URL:");
console.log(` ${databaseUrl}`);
console.log("");
console.log("For tunnel usage (localhost:5432):");
const tunnelUrl = new URL(databaseUrl);
tunnelUrl.hostname = "localhost";
tunnelUrl.port = "5432";
console.log(` ${tunnelUrl.toString()}`);
console.log("");
}