From 6925643fe04fbc0da98375c14ce92d4856ba8098 Mon Sep 17 00:00:00 2001 From: pedrofrxncx Date: Fri, 24 Jul 2026 15:33:54 -0300 Subject: [PATCH] fix(cli): fix deco services CLI's stale duplicate of externalUrlOrNull MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `deco services up/down` externalUrlOrNull had its own copy of the external-host check, missing the bracketed-IPv6 fix landed in #5217 for resolve-config.ts's copy. A bracketed IPv6 loopback DATABASE_URL/NATS_URL (e.g. "postgres://[::1]:5432/postgres") kept the brackets in `URL#hostname`, failed the bare "::1" comparison, and was wrongly treated as external — skipping local Postgres/NATS provisioning. Export the already-fixed, already-tested resolve-config.ts helper and import it in services.ts instead of keeping a second copy. --- apps/api/src/cli/commands/services.ts | 14 +------------- apps/api/src/settings/resolve-config.ts | 2 +- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/apps/api/src/cli/commands/services.ts b/apps/api/src/cli/commands/services.ts index f8c220d00e..36276b1f2b 100644 --- a/apps/api/src/cli/commands/services.ts +++ b/apps/api/src/cli/commands/services.ts @@ -4,19 +4,7 @@ * Replaces scripts/dev-services-cli.ts with a proper CLI subcommand. * Plain console output — no Ink UI needed for these one-shot commands. */ -function externalUrlOrNull(url: string | undefined): string | null { - if (!url) return null; - try { - const parsed = new URL(url); - const host = parsed.hostname; - if (host === "localhost" || host === "127.0.0.1" || host === "::1") { - return null; - } - return url; - } catch { - return null; - } -} +import { externalUrlOrNull } from "../../settings/resolve-config"; export interface ServicesOptions { subcommand: string; diff --git a/apps/api/src/settings/resolve-config.ts b/apps/api/src/settings/resolve-config.ts index c5be7e16b5..70c38851dd 100644 --- a/apps/api/src/settings/resolve-config.ts +++ b/apps/api/src/settings/resolve-config.ts @@ -119,7 +119,7 @@ function toBoolWithDefault( * Determine if a URL points to a non-local host (i.e., an external service). * Returns the URL string if external, null if local or not set. */ -function externalUrlOrNull(url: string | undefined): string | null { +export function externalUrlOrNull(url: string | undefined): string | null { if (!url) return null; try { const parsed = new URL(url);