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.
- package/bin/postgres-ai.ts +1 -1
- package/dist/bin/postgres-ai.js +8 -7
- package/lib/metrics-embedded.ts +1 -1
- package/lib/supabase.ts +10 -7
- package/package.json +1 -1
package/bin/postgres-ai.ts
CHANGED
|
@@ -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 {
|
package/dist/bin/postgres-ai.js
CHANGED
|
@@ -13064,7 +13064,7 @@ var {
|
|
|
13064
13064
|
// package.json
|
|
13065
13065
|
var package_default = {
|
|
13066
13066
|
name: "postgresai",
|
|
13067
|
-
version: "0.14.0-dev.
|
|
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.
|
|
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
|
|
25331
|
-
return `postgresql://${
|
|
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
|
-
|
|
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();
|
package/lib/metrics-embedded.ts
CHANGED
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
|
-
* @
|
|
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
|
|
368
|
-
return `postgresql://${
|
|
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
|
-
//
|
|
375
|
-
|
|
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
|
}
|