Skip to content
20 changes: 18 additions & 2 deletions packages/cli/src/actions/proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,22 @@ function evaluateUrl(value: string): string {
}
}

function redactDatabaseUrl(url: string): string {
try {
const parsedUrl = new URL(url);
if (parsedUrl.password) {
parsedUrl.password = '***';
}
if (parsedUrl.username) {
parsedUrl.username = '***';
}
return parsedUrl.toString();
} catch {
// If URL parsing fails, return the original
return url;
}
}

function createDialect(provider: string, databaseUrl: string, outputPath: string) {
switch (provider) {
case 'sqlite': {
Expand All @@ -125,15 +141,15 @@ function createDialect(provider: string, databaseUrl: string, outputPath: string
});
}
case 'postgresql':
console.log(colors.gray(`Connecting to PostgreSQL database at: ${databaseUrl}`));
console.log(colors.gray(`Connecting to PostgreSQL database at: ${redactDatabaseUrl(databaseUrl)}`));
return new PostgresDialect({
pool: new PgPool({
connectionString: databaseUrl,
}),
});

case 'mysql':
console.log(colors.gray(`Connecting to MySQL database at: ${databaseUrl}`));
console.log(colors.gray(`Connecting to MySQL database at: ${redactDatabaseUrl(databaseUrl)}`));
Comment on lines +144 to +152
Copy link

Copilot AI Jan 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Redaction behavior is security-sensitive and currently untested. The repo has Vitest-based CLI tests (e.g., packages/cli/test/db.test.ts) but nothing covering proxy output; please add coverage that verifies logged connection strings never include raw credentials (including edge cases like special characters and query-param passwords).

Copilot uses AI. Check for mistakes.
return new MysqlDialect({
pool: createMysqlPool(databaseUrl),
});
Expand Down
Loading