44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
const DEFAULT_API_BASE_URL = '/api/v1'
|
|
const API_BASE_URL = normalizeAPIBaseURL(import.meta.env.VITE_API_BASE_URL)
|
|
|
|
function normalizePath(path: string): string {
|
|
return path.startsWith('/') ? path : `/${path}`
|
|
}
|
|
|
|
function normalizeAPIBaseURL(value: unknown): string {
|
|
const raw = String(value || DEFAULT_API_BASE_URL).trim() || DEFAULT_API_BASE_URL
|
|
const withoutTrailingSlash = raw.replace(/\/+$/, '')
|
|
if (/^[a-z][a-z\d+.-]*:\/\//i.test(withoutTrailingSlash) || withoutTrailingSlash.startsWith('//')) {
|
|
return withoutTrailingSlash
|
|
}
|
|
return normalizePath(withoutTrailingSlash)
|
|
}
|
|
|
|
export function getAPIBaseURL(): string {
|
|
return API_BASE_URL
|
|
}
|
|
|
|
export function buildApiUrl(path: string): string {
|
|
const base = getAPIBaseURL().replace(/\/+$/, '')
|
|
let suffix = normalizePath(path)
|
|
if (suffix === DEFAULT_API_BASE_URL) {
|
|
suffix = ''
|
|
} else if (suffix.startsWith(`${DEFAULT_API_BASE_URL}/`)) {
|
|
suffix = suffix.slice(DEFAULT_API_BASE_URL.length)
|
|
}
|
|
return `${base}${suffix}`
|
|
}
|
|
|
|
export function buildGatewayUrl(path: string): string {
|
|
const suffix = normalizePath(path)
|
|
try {
|
|
const origin =
|
|
typeof window === 'undefined'
|
|
? new URL(getAPIBaseURL()).origin
|
|
: new URL(getAPIBaseURL(), window.location.origin).origin
|
|
return `${origin}${suffix}`
|
|
} catch {
|
|
return suffix
|
|
}
|
|
}
|