export type CodexWireApi = "chat" | "responses"; function normalizeUrlPath(pathname: string, wireApi: CodexWireApi): string { let path = pathname.replace(/\/+$/g, ""); if (wireApi === "responses") { path = path.replace(/\/responses(?:\/.*)?$/i, ""); } path = path.replace(/\/v1$/i, "").replace(/\/api$/i, ""); const apiPath = `${path}/api/v1`.replace(/\/{2,}/g, "/"); return apiPath.startsWith("/") ? apiPath : `/${apiPath}`; } export function normalizeCodexBaseUrl(baseUrl: string, wireApi: CodexWireApi = "chat"): string { const trimmed = baseUrl.trim().replace(/\/+$/g, ""); if (!trimmed) return trimmed; try { const parsed = new URL(trimmed); parsed.search = ""; parsed.hash = ""; parsed.pathname = normalizeUrlPath(parsed.pathname, wireApi); return parsed.toString().replace(/\/+$/g, ""); } catch { let normalized = trimmed; if (wireApi === "responses") { normalized = normalized.replace(/\/responses(?:\/.*)?$/i, ""); } return normalized.replace(/\/v1$/i, "").replace(/\/api$/i, "") + "/api/v1"; } }