File size: 1,079 Bytes
cd8bd0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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";
  }
}