Files
umami/src/lib/get-base-url.ts
T

41 lines
923 B
TypeScript

import { HOMEPAGE_URL } from './constants';
type HeaderStore = Pick<Headers, 'get'>;
function getFirstHeaderValue(value?: string | null) {
return value?.split(',')[0]?.trim();
}
function getDefaultProtocol(host?: string) {
if (!host) {
return 'https';
}
if (host.startsWith('localhost') || host.startsWith('127.0.0.1') || host.startsWith('[::1]')) {
return 'http';
}
return 'https';
}
export function getBaseUrl(headers?: HeaderStore) {
const host =
getFirstHeaderValue(headers?.get('x-forwarded-host')) ||
getFirstHeaderValue(headers?.get('host'));
if (!host) {
return new URL(HOMEPAGE_URL);
}
const protocol =
getFirstHeaderValue(headers?.get('x-forwarded-proto')) ||
getFirstHeaderValue(headers?.get('x-forwarded-protocol')) ||
getDefaultProtocol(host);
try {
return new URL(`${protocol}://${host}`);
} catch {
return new URL(HOMEPAGE_URL);
}
}