postgresai 0.14.0-dev.72 → 0.14.0-dev.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -760,7 +760,7 @@ program
760
760
  // Fetch database URL for JSON output (non-blocking, best-effort)
761
761
  let databaseUrl: string | null = null;
762
762
  if (jsonOutput) {
763
- databaseUrl = await fetchPoolerDatabaseUrl(supabaseConfig);
763
+ databaseUrl = await fetchPoolerDatabaseUrl(supabaseConfig, opts.monitoringUser);
764
764
  }
765
765
 
766
766
  try {
@@ -13064,7 +13064,7 @@ var {
13064
13064
  // package.json
13065
13065
  var package_default = {
13066
13066
  name: "postgresai",
13067
- version: "0.14.0-dev.72",
13067
+ version: "0.14.0-dev.73",
13068
13068
  description: "postgres_ai CLI",
13069
13069
  license: "Apache-2.0",
13070
13070
  private: false,
@@ -15887,7 +15887,7 @@ var Result = import_lib.default.Result;
15887
15887
  var TypeOverrides = import_lib.default.TypeOverrides;
15888
15888
  var defaults = import_lib.default.defaults;
15889
15889
  // package.json
15890
- var version = "0.14.0-dev.72";
15890
+ var version = "0.14.0-dev.73";
15891
15891
  var package_default2 = {
15892
15892
  name: "postgresai",
15893
15893
  version,
@@ -25312,7 +25312,7 @@ class SupabaseClient {
25312
25312
  return err;
25313
25313
  }
25314
25314
  }
25315
- async function fetchPoolerDatabaseUrl(config2) {
25315
+ async function fetchPoolerDatabaseUrl(config2, username) {
25316
25316
  const url = `${SUPABASE_API_BASE}/v1/projects/${encodeURIComponent(config2.projectRef)}/config/database/pooler`;
25317
25317
  try {
25318
25318
  const response = await fetch(url, {
@@ -25327,13 +25327,14 @@ async function fetchPoolerDatabaseUrl(config2) {
25327
25327
  const data = await response.json();
25328
25328
  if (Array.isArray(data) && data.length > 0) {
25329
25329
  const pooler = data[0];
25330
- if (pooler.db_host && pooler.db_port && pooler.db_name && pooler.db_user) {
25331
- return `postgresql://${pooler.db_user}@${pooler.db_host}:${pooler.db_port}/${pooler.db_name}`;
25330
+ if (pooler.db_host && pooler.db_port && pooler.db_name) {
25331
+ return `postgresql://${username}@${pooler.db_host}:${pooler.db_port}/${pooler.db_name}`;
25332
25332
  }
25333
25333
  if (typeof pooler.connection_string === "string") {
25334
25334
  try {
25335
25335
  const connUrl = new URL(pooler.connection_string);
25336
- return `postgresql://${connUrl.username}@${connUrl.hostname}:${connUrl.port}${connUrl.pathname}`;
25336
+ const portPart = connUrl.port ? `:${connUrl.port}` : "";
25337
+ return `postgresql://${username}@${connUrl.hostname}${portPart}${connUrl.pathname}`;
25337
25338
  } catch {
25338
25339
  return null;
25339
25340
  }
@@ -28004,7 +28005,7 @@ program2.command("prepare-db [conn]").description("prepare database for monitori
28004
28005
  const supabaseClient = new SupabaseClient(supabaseConfig);
28005
28006
  let databaseUrl = null;
28006
28007
  if (jsonOutput) {
28007
- databaseUrl = await fetchPoolerDatabaseUrl(supabaseConfig);
28008
+ databaseUrl = await fetchPoolerDatabaseUrl(supabaseConfig, opts.monitoringUser);
28008
28009
  }
28009
28010
  try {
28010
28011
  const database = await supabaseClient.getCurrentDatabase();
@@ -1,6 +1,6 @@
1
1
  // AUTO-GENERATED FILE - DO NOT EDIT
2
2
  // Generated from config/pgwatch-prometheus/metrics.yml by scripts/embed-metrics.ts
3
- // Generated at: 2026-01-09T15:26:19.729Z
3
+ // Generated at: 2026-01-09T16:03:14.462Z
4
4
 
5
5
  /**
6
6
  * Metric definition from metrics.yml
package/lib/supabase.ts CHANGED
@@ -335,13 +335,15 @@ export class SupabaseClient {
335
335
 
336
336
  /**
337
337
  * Fetch the database pooler connection string from Supabase Management API.
338
- * Returns a postgresql:// URL with username but no password.
338
+ * Returns a postgresql:// URL with the specified username but no password.
339
339
  *
340
340
  * @param config Supabase configuration with projectRef and accessToken
341
- * @returns Database URL without password (e.g., "postgresql://postgres.ref@host:port/postgres")
341
+ * @param username Username to include in the URL (e.g., monitoring user)
342
+ * @returns Database URL without password (e.g., "postgresql://user@host:port/postgres")
342
343
  */
343
344
  export async function fetchPoolerDatabaseUrl(
344
- config: SupabaseConfig
345
+ config: SupabaseConfig,
346
+ username: string
345
347
  ): Promise<string | null> {
346
348
  const url = `${SUPABASE_API_BASE}/v1/projects/${encodeURIComponent(config.projectRef)}/config/database/pooler`;
347
349
 
@@ -364,15 +366,16 @@ export async function fetchPoolerDatabaseUrl(
364
366
  if (Array.isArray(data) && data.length > 0) {
365
367
  const pooler = data[0];
366
368
  // Build URL from components if available
367
- if (pooler.db_host && pooler.db_port && pooler.db_name && pooler.db_user) {
368
- return `postgresql://${pooler.db_user}@${pooler.db_host}:${pooler.db_port}/${pooler.db_name}`;
369
+ if (pooler.db_host && pooler.db_port && pooler.db_name) {
370
+ return `postgresql://${username}@${pooler.db_host}:${pooler.db_port}/${pooler.db_name}`;
369
371
  }
370
372
  // Fallback: try to extract from connection_string if present
371
373
  if (typeof pooler.connection_string === "string") {
372
374
  try {
373
375
  const connUrl = new URL(pooler.connection_string);
374
- // Remove password from URL
375
- return `postgresql://${connUrl.username}@${connUrl.hostname}:${connUrl.port}${connUrl.pathname}`;
376
+ // Use provided username; handle empty port for default ports (e.g., 5432)
377
+ const portPart = connUrl.port ? `:${connUrl.port}` : "";
378
+ return `postgresql://${username}@${connUrl.hostname}${portPart}${connUrl.pathname}`;
376
379
  } catch {
377
380
  return null;
378
381
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postgresai",
3
- "version": "0.14.0-dev.72",
3
+ "version": "0.14.0-dev.73",
4
4
  "description": "postgres_ai CLI",
5
5
  "license": "Apache-2.0",
6
6
  "private": false,