in common/utils.ts [37:82]
export function buildUrl(baseUrl: string, params: Record<string, string | number | undefined>): string {
// Handle baseUrl that doesn't have protocol
const isAbsolute = baseUrl.startsWith("http://") || baseUrl.startsWith("https://");
const fullBaseUrl = isAbsolute ? baseUrl : `${getYunxiaoApiBaseUrl()}${baseUrl.startsWith('/') ? baseUrl : `/${baseUrl}`}`;
try {
const url = new URL(fullBaseUrl);
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined) {
url.searchParams.append(key, value.toString());
}
});
const result = url.toString();
console.error(`[DEBUG] Final URL: ${result}`);
// If we started with a relative URL, return just the path portion
if (!baseUrl.startsWith('http')) {
// Extract the path and query string from the full URL
const urlObj = new URL(result);
return urlObj.pathname + urlObj.search;
}
return result;
} catch (error) {
console.error(`[ERROR] Failed to build URL: ${error}`);
// Fallback: manually append query parameters
let urlWithParams = baseUrl;
const queryParts: string[] = [];
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined) {
queryParts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value.toString())}`);
}
});
if (queryParts.length > 0) {
urlWithParams += (urlWithParams.includes('?') ? '&' : '?') + queryParts.join('&');
}
console.error(`[DEBUG] Fallback URL: ${urlWithParams}`);
return urlWithParams;
}
}